我试图使用Java中的Apache OAuth Client 2.0 Library自动执行用户级别令牌创建/生成过程(REST /授权授予代码)。以下是我从https://cwiki.apache.org/confluence/display/OLTU/OAuth+2.0+Client+Quickstart获得的正在使用的代码,
`/*Previous Codes & starting the below with Try/Catch*/ OAuthClientRequest request = OAuthClientRequest .authorizationLocation("Authorization URL") .setClientId("ClientID") .setRedirectURI("Redirect URL") .buildQueryMessage(); request.getLocationUri(); OAuthAuthzResponse oar = OAuthAuthzResponse.oauthCodeAuthzResponse(request); String code = oar.getCode(); /*Other Codes and starting the below with Try/Catch*/ OAuthClientRequest request = OAuthClientRequest .tokenLocation("TokenEndPointURL") .setGrantType(GrantType.AUTHORIZATION_CODE) .setClientId("ClientID") .setClientSecret("ClientSecret") .setRedirectURI("REdirectURL") .setCode(code)//Authorization Code from above .buildQueryMessage(); OAuthClient oAuthClient = new OAuthClient(new URLConnectionClient()); GitHubTokenResponse oAuthResponse = oAuthClient.accessToken(request, GitHubTokenResponse.class); String accessToken = oAuthResponse.getAccessToken(); String expiresIn = oAuthResponse.getExpiresIn();`
但是,我在以下几行中收到了(来自Eclipse中错误的推断)编译错误,
oauthCodeAuthzResponse方法接受httpservlet对象,并且不支持OAuthAuthzReponse Type
OAuthAuthzResponse oar = OAuthAuthzResponse.oauthCodeAuthzResponse(request);
有人可以让我知道是否有解决方法吗?或如何将oauthCodeAuthzResponse请求转换为httpservlet请求?还是我做错了什么或缺少什么?
OAuthAuthzResponse oar = OAuthAuthzResponse.oauthCodeAuthzResponse(request); String code = oar.getCode();
我认为上面的代码应该写在重定向URI端点的实现中,而不是在客户端代码中。
正确理解授权码流将有所帮助。一个 授权码 从授权服务器的授权端点发行,它被传递到由重定向URI指向的位置。也就是说,授权代码不会直接传递给客户端应用程序。
当授权服务器发出授权代码时,它将如下所示的HTTP响应发送回客户端的Web浏览器。
HTTP/1.1 302 Found Location: {Redirect URI} ?code={Authorization Code} // - Always included &state={Arbitrary String} // - Included if the authorization // request included 'state'.
302 Found触发Web浏览器转到Location标题所指向的位置。因此,您必须实现接收授权代码的位置,并且实现必须以某种方式将授权代码传递给客户端应用程序。
302 Found
Location
还要注意,在(a)授权请求(=对授权端点的请求)和(b)令牌请求(=对令牌端点的请求)之间显示授权页面(HTML),并且该页面需要最终用户相互作用。有关详细信息,请参见“ 所有OAuth 2.0流程的图表和影片 ”中的“ 1.授权代码流程” 。