ScribeJavaへのガイド

1前書き

このチュートリアルでは、https://github.com/scribejava/scribejava[ScribeJava]ライブラリを見ていきます。

ScribeJavaは、OAuthフローの管理に役立つ、Java用の単純なOAuthクライアントです。

このライブラリの主な機能は、すべての主要な1.0および2.0 OAuth APIをそのまま使用できることです。さらに、サポートされていないAPIを使用する必要がある場合は、ライブラリにOAuthのAPIを実装するためのクラスがいくつか用意されています。

もう1つの重要な機能は、どのクライアントを使用するかを選択できるということです。実際、ScribeJavaはいくつかのHTTPクライアントをサポートしています。

HttpComponentsのHttpClient]

さらに、このライブラリはスレッドセーフでJava 7と互換性があるため、従来の環境でも使用できます。

2依存関係

  • ScribeJavaはコアおよびAPIモジュール** に編成されています。後者は外部API(Google、GitHub、Twitterなど)とコア成果物のセットを含みます。

<dependency>
    <groupId>com.github.scribejava</groupId>
    <artifactId>scribejava-apis</artifactId>
    <version>latest-version</version>
</dependency>

外部APIなしでコアクラスだけが必要な場合は、コアモジュールだけを取得する必要があります。

<dependency>
    <groupId>com.github.scribejava</groupId>
    <artifactId>scribejava-core</artifactId>
    <version>latest-version</version>
</dependency>

最新版はhttps://search.maven.org/search?q=scribejava-core[Maven repository]にあります。

3 OAuthService

  • このライブラリの主要部分は抽象クラス OAuthService ** で、OAuthの「ハンドシェイク」を正しく管理するために必要なすべてのパラメータが含まれています。

プロトコルのバージョンに応じて、https://tools.ietf.org/html/rfc5849[OAuth 1.0]とhttps://tools.ietf.org/html/rfc6749にそれぞれ Oauth10Service または Oauth20Service 具象クラスを使用します。[OAuth 2.0]。

OAuthService 実装を構築するために、ライブラリは__ServiceBuilderを提供します。

OAuthService service = new ServiceBuilder("api__key")
  .apiSecret("api__secret")
  .scope("scope")
  .callback("callback")
  .build(GoogleApi20.instance());

認証サーバーによって提供される api key および api secret トークンを設定する必要があります。

また、リクエストのスコープと、承認フローの最後に承認サーバーがユーザーをリダイレクトする呼び出し先を設定できます。

プロトコルのバージョンによっては、すべてのパラメータが必須というわけではありません。

最後に、 build() メソッドを呼び出して、使用したいAPIのインスタンスを渡す OAuthService を構築する必要があります。 ScribeJava GitHub でサポートされているAPIの完全なリストを見つけることができます。

3.1. HTTPクライアント

さらに、** このライブラリでは、どのHTTPクライアントを使用するかを選択できます。

ServiceBuilder builder = new ServiceBuilder("api__key")
  .httpClient(new OkHttpHttpClient());

もちろん、前の例では、必要な依存関係を含めました。

<dependency>
    <groupId>com.github.scribejava</groupId>
    <artifactId>scribejava-httpclient-okhttp</artifactId>
    <version>latest-version</version>
</dependency>

最新版はhttps://mvnrepository.com/artifact/com.github.scribejava[Mavenリポジトリ]にあります。

3.2. デバッグモード

さらに、 トラブルシューティングに役立つデバッグモードがあります。

ServiceBuilder builder = new ServiceBuilder("api__key")
  .debug();

単に debug() メソッドを呼び出すだけです。デバッグは System.out にいくつかの関連情報を出力します。

また、別の出力を使用したい場合は、 OutputStream を受け入れてデバッグ情報を送信する別の方法があります。

FileOutputStream debugFile = new FileOutputStream("debug");

ServiceBuilder builder = new ServiceBuilder("api__key")
  .debug()
  .debugStream(debugFile);

4 OAuth 1.0の流れ

それでは、OAuth1フローを処理する方法に焦点を絞りましょう。

この例では、** Twitter APIを使用して アクセストークン を取得し、それを使用してリクエストを行います。

まず最初に、先ほど見たように、Builderを使用して Oauth10Service をビルドする必要があります。

OAuth10aService service = new ServiceBuilder("api__key")
  .apiSecret("api__secret")
  .build(TwitterApi.instance());

__OAuth10Serviceを取得したら、 weは requestToken__を取得し、それを使用して承認URLを取得できます。

OAuth1RequestToken requestToken = service.getRequestToken();
String authUrl = service.getAuthorizationUrl(requestToken);

この時点で、ユーザーを authUrl にリダイレクトして、ページによって提供される____oauthVerifierを取得する必要があります。

したがって、 accessToken を取得するには __oauthVerifier __を使用します。

OAuth1AccessToken accessToken = service.getAccessToken(requestToken,oauthVerifier);

最後に、 OAuthRequest オブジェクトを使用してリクエストを作成し、 signRequest() メソッドを使用してそれにトークンを追加します。

OAuthRequest request = new OAuthRequest(Verb.GET,
    "https://api.twitter.com/1.1/account/verify__credentials.json");
service.signRequest(accessToken, request);

Response response = service.execute(request);

その request の実行の結果として、 Response オブジェクトが得られます。

5 OAuth 2.0の流れ

OAuth 2.0のフローは、OAuth 1.0とそれほど変わりません。これらのバリエーションを説明するために、Google APIを使用して アクセストークン を取得します。

同様に、OAuth 1.0フローでは、 OAuthService を構築して authUrlを取得する必要があります。ただし、今回は OAuth20Service__インスタンスを使用します。

OAuth20Service service = new ServiceBuilder("api__key")
  .apiSecret("api__secret")
  .scope("https://www.googleapis.com/auth/userinfo.email")
  .callback("http://localhost:8080/auth")
  .build(GoogleApi20.instance());

String authUrl = service.getAuthorizationUrl();

この場合、リクエストの「スコープ」と、承認フローの最後に連絡する「コールバック」を指定する必要があります。

同様に、ユーザーを authUrl にリダイレクトし、コールバックのURLの code パラメータを取得する必要があります。

OAuth2AccessToken accessToken = service.getAccessToken(code);

OAuthRequest request = new OAuthRequest(Verb.GET, "https://www.googleapis.com/oauth2/v1/userinfo?alt=json");
service.signRequest(accessToken, request);

Response response = service.execute(request);

最後に、 request を作成するために、 __ accessToken with getAccessToken()メソッドを取得します。

6. カスタムAPI

ScribeJavaではサポートされていないAPIを使用する必要があるでしょう。そのような状況下では、 このライブラリは私たち自身のAPIを実装することを可能にします

私たちがする必要がある唯一のことは DefaultApi10 または __DefaultApi20 __classの実装を提供することです。

パスワードを付与したOAuth 2.0認証サーバがあるとしましょう。この場合、 アクセストークン を取得できるように DefaultApi20 を実装できます。

public class MyApi extends DefaultApi20 {

    public MyApi() {}

    private static class InstanceHolder {
        private static final MyApi INSTANCE = new MyApi();
    }

    public static MyApi instance() {
        return InstanceHolder.INSTANCE;
    }

    @Override
    public String getAccessTokenEndpoint() {
        return "http://localhost:8080/oauth/token";
    }

    @Override
    protected String getAuthorizationBaseUrl() {
        return null;
    }
}

したがって、以前と同じ方法でアクセストークンを取得できます。

OAuth20Service service = new ServiceBuilder("baeldung__api__key")
  .apiSecret("baeldung__api__secret")
  .scope("read write")
  .build(MyApi.instance());

OAuth2AccessToken token = service.getAccessTokenPasswordGrant(username, password);

OAuthRequest request = new OAuthRequest(Verb.GET, "http://localhost:8080/me");
service.signRequest(token, request);
Response response = service.execute(request);

7. 結論

この記事では、ScribeJavaが提供している最も有用なクラスを調べました。

外部APIを使ってOAuth 1.0およびOAuth 2.0フローを処理する方法を学びました。私達はまた私達の自身のAPIを使うためにライブラリを設定する方法を学びました。

いつもどおり、このチュートリアルに示されているすべてのコードサンプルはhttps://github.com/eugenp/tutorials/tree/master/libraries-security[GitHubで利用可能]です。

前の投稿:ElasticSearchによる全文検索の概要
次の投稿:Spring SecurityでのX.509認証