OAuth提供程序库(Java)

我正在寻找一个可帮助我构buildOAuth提供程序的Java库。 我必须能够接收OAuth签名的请求,并确定它们是否有效(检查签名,时间戳和随机数值)。

你知道有没有什么东西让这个任务更容易?

Scribe是一个由提问者自己编写的用于Java的OAuth库。 😉

注:我发布这里作为一个答案,以便其他谷歌有替代品的select。 对于另一个基于库的替代scheme,请参阅我的另一个答案“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); 

创build请求:

 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上提到的一个库看起来很有趣(我不包括Spring Security和OAuth路标的OAuth ,而不是你要找的):

Java库和例子由John Kristian,Praveen Alavilli和Dirk Ba​​lfanz提供。

Spring Security的OAuth也由Ryan Heaton提供。 此项目不在OAuth存储库中。

OAuth Signpost为Java和Apache HttpComponents(Google Android ready!)提供了简单的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"); %> 

这看起来接近你想要的。

您可以使用Jersey OAuth签名库

一个servlet或filter的简单的OAuthauthentication可以使用一个容器filter来设置,它在请求被匹配并分派到一个根资源类之前过滤请求。 容器filter使用指向用户定义的类的初始化参数进行注册,如下所示:

 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 。

Interesting Posts