Javaプロバイダーの構築に役立つOAuthライブラリーを探しています。 OAuth署名付きリクエストを受信し、それらが有効かどうかを判断できる必要があります(署名、タイムスタンプ、およびナンス値を確認します)。
このタスクを簡単にする何かがそこにあるかどうか知っていますか?
ScribeはOAuth Javaのライブラリで、質問者自身が作成しました。;- )
注:他のGoogle社員が選択肢を選択できるように、これを回答としてここに投稿します。別のライブラリベースの代替手段については、他の回答「Jersey OAuth signature library」を参照してください。
使用法を説明するいくつかのコード:
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();
http://oauth.net/code で言及されたライブラリの1つは興味深いようです( OAuth for Spring Security および OAuth Signpost whichあなたが探しているものではありません):
Javaライブラリ および 例 は、John Kristian、Praveen Alavilli、およびDirk Balfanzによって提供されました。
Spring SecurityのOAuth も利用可能です。RyanHeatonによって提供されました。このプロジェクトはOAuthリポジトリでホストされていません。
OAuth Signpost は、OAuthおよびApache HttpComponents(Google Java準備完了!)の簡単なAndroidメッセージ署名を提供します。 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"); %>
これはあなたが望むものに近いように見えます。
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;
}
}
Spring Securityには OAuthプラグイン があります
http://oauth.googlecode.com/svn/code/Java/ にライブラリのSubversionリポジトリがあるようです。ただし、実行可能ファイルを取得するにはmavenをチェックアウトして実行する必要があります。
Example/webapp/src/main/Javaにアクセスすると、Twitter、Yahoo、その他から消費するいくつかの例があります。
Jersey (JAX-RSのリファレンス実装)は、OpenSSO Auth Filterと呼ばれるJersey拡張機能を介してOAuthをサポートします。ただし、追加のOpenSSOサーバーインスタンスが必要です。詳細については、 このドキュメントを参照してください 。
OpenSSOはOracleによって廃止され、現在 ForgeRockの下にOpenAM として存在することに注意してください。