当前位置: 首页 > 面试题库 >

使用Java中的Apache OAuth客户端2.0库生成授权代码和用户令牌的问题

洪弘毅
2023-03-14
问题内容

我试图使用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标题所指向的位置。因此,您必须实现接收授权代码的位置,并且实现必须以某种方式将授权代码传递给客户端应用程序。

还要注意,在(a)授权请求(=对授权端点的请求)和(b)令牌请求(=对令牌端点的请求)之间显示授权页面(HTML),并且该页面需要最终用户相互作用。有关详细信息,请参见“
所有OAuth 2.0流程的图表和影片 ”中的“ 1.授权代码流程” 。



 类似资料:
  • 我正在尝试使用DocuSign API和代码生成access\u令牌(https://developers.docusign.com/platform/auth/authcode/authcode-get-token) 我致电POST请求:https://account-d.docusign.com/oauth/token 使用以下正文(application/x-www-form-urlenco

  • 我试图按照指南为YAHOO DSP API生成Oauth认证令牌。 Base64编码是一种将二进制数据编码为文本的方式,这样可以轻松无误地通过网络传输。 在此步骤中,您将获取YDN控制台为您生成的客户端ID和客户端密码,并使用base64协议对它们进行编码。你可以使用base64encode.org这样的在线编码服务。 无论您使用哪种服务,请确保CLIENT_ID和CLIENT_SECRET键上不

  • 我在这里有点迷路,需要一些直接的请。我是新来Java,这是我试图写的第一个程序,显然与它斗争了一个月左右。因此,目前我们使用邮递员输入客户端ID/秘密从第三方应用编程接口获得访问令牌,使用该令牌我们可以从第三方的另一个终端请求资源。我正在尝试引用多个资源,如此Spring安全示例https://github.com/spring-projects/spring-security/blob/mast

  • 我正在尝试在twitter上创建一个应用程序。当我登录时,它会给我以下错误- 错误-是否授权“”使用您的帐户? 我得到以下错误在访问请求令牌(https://api.twitter.com/oauth/request_token)- 错误-无法验证oauth签名和令牌。 我正在做的是重定向用户到: https://twitter.com/oauth/authenticate?oauth_token

  • 我们正在使用Spring引导作为后端,仅为auth和生成jwt令牌的其余部分在hasura中处理。 我面临正确生成JWT的问题。 这是生成jwt令牌作为 但它hasura返回无效的签名。在哪里作为在节点 jwt从节点 使用相同的密钥和算法工作得非常好。对于节点,我使用了jsonwebtoken库。

  • 我试图弄清楚如何处理Passport包中的密码授予令牌。我是否应该将客户id和客户机密存储在中。env文件或在请求令牌时直接从数据库获取值?