其他分享
首页 > 其他分享> > android-OAuth2请求缺少参数access_token

android-OAuth2请求缺少参数access_token

作者:互联网

我正在使用Apache Amber库尝试在我的控制下从网站检索OAuth2访问令牌.我的客户端代码在Android下运行.

我的代码以示例为例:

https://cwiki.apache.org/confluence/display/AMBER/OAuth+2.0+Client+Quickstart

第一步,我可以通过使用WebView浏览器提交GET请求来检索“代码”:

OAuthClientRequest request = OAuthClientRequest
 .authorizationLocation(AUTHORIZE_URL)
 .setClientId(CLIENT_ID)
 .setRedirectURI(REDIR_URL)
 .setResponseType(CODE_RESPONSE)
 .buildQueryMessage();

 webview.loadUrl(request.getLocationUri());

我使用WebViewClient回调来捕获带有“ code”参数的重定向URL.到现在为止还挺好.

使用该代码,我尝试检索访问令牌:

OAuthClient oAuthClient = new OAuthClient(new URLConnectionClient());

OAuthClientRequest request = OAuthClientRequest
  .tokenLocation(ACCESS_TOKEN_URL)
  .setGrantType(GrantType.AUTHORIZATION_CODE)
  .setClientId(CLIENT_ID)
  .setClientSecret(CLIENT_SECRET)
  .setRedirectURI(REDIR_URL)
  .setCode(code)
  .buildBodyMessage();

GitHubTokenResponse oAuthResponse = 
  oAuthClient.accessToken(request, GitHubTokenResponse.class);

每次运行代码时,我都会收到OAuthProblemException,该消息是由于缺少参数access_token而导致我的请求无效.

另一个StackOverflow帖子提到了来自类似OAuth2请求的此异常,在这种情况下,该异常是由OAuth请求中的不同重定向URI引起的.但是我通过使用命名常量来确保重定向URI相同.这是该帖子的链接:

OAuthProblem, missing parameter access_token

现在,我可以打印出第一个请求返回的代码,并将其粘贴到从我的台式机运行的curl命令中:

curl -d“代码= …& client_id = …& client_secret = …& grant_type = …& redirect_uri = …” http://my_website.com

并且我从我的网站上获得了一个带有access_token的不错的JSON响应.

为什么从Java的调用失败,而我手动滚动的命令行成功了?

解决方法:

我在实现客户端和服务器时遇到了相同的问题,该问题与Apache Amber(Oltu)项目中的Client Example中的一个错误有关:

首先,您有Auth代码请求(有效):

OAuthClientRequest request = OAuthClientRequest
    .authorizationLocation(AUTHORIZE_URL)
    .setClientId(CLIENT_ID)
    .setRedirectURI(REDIR_URL)
    .setResponseType(CODE_RESPONSE)
    .**buildQueryMessage**();

其次是关于访问令牌的请求(无效):

OAuthClientRequest request = OAuthClientRequest
    .tokenLocation(ACCESS_TOKEN_URL)
    .setGrantType(GrantType.AUTHORIZATION_CODE)
    .setClientId(CLIENT_ID)
    .setClientSecret(CLIENT_SECRET)
    .setRedirectURI(REDIR_URL)
    .setCode(code)
    .**buildBodyMessage**();

错误与第二个请求中的buildBodyMessage()有关.通过buildQueryMessage()对其进行更改.

标签:oauth-2-0,android
来源: https://codeday.me/bug/20191127/2076125.html