2015-10-05 53 views
1

你好,我卡在oauth2问题上。我不使用弹簧。我有一些JAX-RS网络服务,使用netbeans包含的球衣罐组成。我必须使用oauth 2来保护这些服务,以便移动客户端可以在不存储用户凭证的情况下使用它。我甚至不知道从哪里开始,因为我看到的所有例子都使用Spring ...不使用Spring的那些使用Oltu库的许多文档并没有说服我。有些oltu样本甚至都不工作。任何人都可以给我看一个教程,将帮助我从头开始使用泽西岛和一些图书馆构建授权服务器?任何一个甚至oltu ...oAuth 2执行java

+0

你可以从春天例子模式 – haseeb

+0

我会后你的解释,但首先我需要知道:你是否理解OAuth的功能及其许多部分(客户端,用户,资源服务器等)? – Nathan

+0

@ user3252187我发布了一个基于[oltu示例](https://cwiki.apache.org/confluence/display/OLTU/OAuth+2.0+Client+Quickstart)的测试客户端的样子,以及我自己的代码(主要来自互联网)。 – Nathan

回答

0

我的答案将基于奥尔图。我将使用CLIENT_CREDENTIALS认证。

获取令牌应该是这样的:

// We initialize a client 
OAuthClient lOAuthClient = new OAuthClient(new URLConnectionClient()); 
OAuthJSONAccessTokenResponse lOAuthResponse; 

// We are creating a request that's already formatted following the Oauth specs 
OAuthClientRequest lRequest = OAuthClientRequest 
     .tokenLocation(TOKEN_SERVER_URI) 
     .setGrantType(GrantType.CLIENT_CREDENTIALS) 
     .setClientId(CLIENT_ID) 
     .setClientSecret(CLIENT_SECRET) 
     .setScope("admin") 
     .buildBodyMessage(); 

//This will submit the request 
String code = lOAuthClient.accessToken(lRequest, OAuthJSONAccessTokenResponse.class).getAccessToken(); 
System.out.println("Token obtained:" + token); 

现在我们可以用我们的令牌获得我们的ressource:

HttpURLConnection resourceConn = (HttpURLConnection) (new URL(RESSOURCE_SERVER_URI).openConnection()); 
resourceConn.addRequestProperty("Authorization", "Bearer " + token); 

InputStream resource = resourceConn.getInputStream(); 

// Do whatever you want to do with the contents of resource at this point. 
BufferedReader r = new BufferedReader(new InputStreamReader(resource, "UTF-8")); 
String line = null; 
while ((line = r.readLine()) != null) 
    System.out.println(line);