55

OAuth プロバイダーの構築に役立つ Java ライブラリを探しています。OAuth 署名付きリクエストを受信し、それらが有効かどうかを判断できる必要があります (署名、タイムスタンプ、ナンス値をチェックします)。

この作業を簡単にする何かがあるかどうか知っていますか?

4

6 に答える 6

30

Scribeは、質問者自身が作成した Java 用の OAuth ライブラリです。;-)

注: 他の Google 社員が代替案を選択できるように、これを回答としてここに投稿します。別のライブラリベースの代替手段については、私の他の回答「Jersey OAuth署名ライブラリ」を参照してください。

使用法を示すコード:

OAuthService service = new ServiceBuilder()
                                  .provider(TwitterApi.class)
                                  .apiKey("your_api_key")
                                  .apiSecret("your_api_secret")
                                  .build();
...
Token requestToken = service.getRequestToken();
String your_token = requestToken.getToken();
...
Verifier verifier = new Verifier("your_previously_retrieved_verifier");
 Token accessToken = service.getAccessToken(requestToken, verifier);

リクエストの作成:

OAuthRequest request = OAuthRequest(Verb.GET, "http://api.twitter.com/1/direct_messages.json");
service.signRequest(accessToken, request);
Response response = request.send();
于 2010-12-23T08:28:20.800 に答える
12

http://oauth.net/codeで言及されているライブラリの 1 つが興味深いようです ( Spring Securityの OAuthとOAuth Signpostは除外していますが、これらは探しているものではありません)。

Java ライブラリサンプルは、John Kristian、Praveen Alavilli、および Dirk Ba​​lfanz によって寄贈されました。

Ryan Heaton によって提供された、 Spring Security の OAuthも利用できます。このプロジェクトは OAuth リポジトリでホストされていません。

OAuth Signpost は、Java および Apache HttpComponents (Google Android 対応!) 用のシンプルな OAuth メッセージ署名を提供します。Matthias Kaeppler による寄稿。

Java ライブラリをもう少し調べてみたところ、クライアント側とサーバー側のコードに必要なすべてが提供されていると思います。次のブログ投稿には実際に完全な例があり、以下のサーバー コード (JSP) を貼り付けています。

<%@ page import="net.oauth.server.*"%>
<%@ page import="net.oauth.*"%>

<%
//Presumably this should actually be looked up for a given key.
String consumerSecret="uynAeXiWTisflWX99KU1D2q5";

//Presumably the key is sent by the client. This is part of the URL, after all.
String consumerKey="orkut.com:623061448914";

//Construct the message object. Use null for the URL and let the code construct it.
OAuthMessage message=OAuthServlet.getMessage(request,null);

//Construct an accessor and a consumer
OAuthConsumer consumer=new OAuthConsumer(null, consumerKey, consumerSecret, null);
OAuthAccessor accessor=new OAuthAccessor(consumer);

//Now validate. Weirdly, validator has a void return type. It throws exceptions
//if there are problems.
SimpleOAuthValidator validator=new SimpleOAuthValidator();
validator.validateMessage(message,accessor);

//Now what? Generate some JSON here for example.
System.out.println("It must have worked"); %> 

これはあなたが望むものに近いように見えます。

于 2009-11-13T21:45:29.313 に答える
4

Jersey OAuth Signature Libraryを使用できます。

サーブレットまたはフィルターの単純な OAuth 認証は、コンテナー フィルターを使用して設定できます。コンテナー フィルターは、要求が照合されてルート リソース クラスにディスパッチされる前に要求をフィルター処理します。コンテナー フィルターは、次のようなユーザー定義クラスを指す初期化パラメーターを使用して登録されます。

public class OAuthAuthenticationFilter implements ContainerRequestFilter {
    @Override
    public ContainerRequest filter(ContainerRequest containerRequest) {
        // Read the OAuth parameters from the request
        OAuthServerRequest request = new OAuthServerRequest(containerRequest);
        OAuthParameters params = new OAuthParameters();
        params.readRequest(request);

        // Set the secret(s), against which we will verify the request
        OAuthSecrets secrets = new OAuthSecrets();
        // ... secret setting code ...

        // Check that the timestamp has not expired
        String timestampStr = params.getTimestamp();
        // ... timestamp checking code ...

        // Verify the signature
        try {
            if(!OAuthSignature.verify(request, params, secrets)) {
                throw new WebApplicationException(401);
            }
        } catch (OAuthSignatureException e) {
            throw new WebApplicationException(e, 401);
        }

        // Return the request
        return containerRequest;
    }
}
于 2010-12-22T18:58:26.653 に答える
1

Spring Security 用のOAuth プラグインがあります

于 2009-11-13T21:16:02.613 に答える
0

http://oauth.googlecode.com/svn/code/java/にライブラリの Subversion リポジトリがあるようです。ただし、実行可能ファイルを取得するには、maven をチェックアウトして実行する必要があるようです。

example/webapp/src/main/java にアクセスすると、Twitter、Yahoo などからの消費の例がいくつかあります。

于 2009-11-13T21:48:28.053 に答える
0

Jersey (JAX-RS の参照実装) は、OpenSSO Auth Filter と呼ばれる Jersey 拡張機能を介して OAuth をサポートします。ただし、これには追加の OpenSSO サーバー インスタンスが必要です。詳細については、このドキュメントを参照してください

OpenSSO は Oracle によって廃止され、現在はOpenAM として ForgeRock の下にあることに注意してください。

于 2010-12-22T18:57:25.703 に答える