【问题标题】:Refresh token returns invalid grant type刷新令牌返回无效的授权类型
【发布时间】:2016-03-14 04:34:10
【问题描述】:

我正在尝试刷新从 wso2 身份服务器获得的访问令牌(基于https://docs.wso2.com/display/IS510/Refresh+Token+Grant);服务器返回一个无效的授权类型响应

{
  "error": "invalid_grant",
  "error_description": "Provided Authorization Grant is invalid"
}

访问令牌是使用“授权码”授权类型和 openid 范围获得的。

我已经在服务器上开启了日志;但是,我无法确定无效授权类型响应的原因。如何让 WSO2 身份服务器使用刷新令牌刷新我的访问令牌?

来自服务器的日志:

TID:[-1234] [] [2016-03-14 09:20:11,241] 调试 {org.wso2.carbon.identity.oauth2.OAuth2Service} - 访问令牌 收到客户端 ID CHao3ZYUVY6tRX4jJ82yzh4NVpka、用户 ID 的请求 null,范围:[openid] 和授权类型:refresh_token

TID:[-1234] [] [2016-03-14 09:20:11,241] 调试 {org.wso2.carbon.identity.oauth2.token.handlers.clientauth.Abs​​tractClientAuthHandler} - 可以使用客户端 ID 和 Secret 进行身份验证。客户端 ID:CHao3ZYUVY6tRX4jJ82yzh4NVpka TID:[-1234] [] [2016-03-14 09:20:11,241] 调试 {org.wso2.carbon.identity.oauth2.token.handlers.clientauth.Abs​​tractClientAuthHandler} - 授予类型:refresh_token 严格的客户端验证设置为:null

TID:[-1234] [] [2016-03-14 09:20:11,242] 调试 {org.wso2.carbon.identity.oauth2.util.OAuth2Util} - 客户端 凭据是从数据库中获取的。 TID:[-1234] [] [2016-03-14 09:20:11,242] 调试 {org.wso2.carbon.identity.oauth2.util.OAuth2Util} - 成功 使用客户端 ID 对客户端进行身份验证:CHao3ZYUVY6tRX4jJ82yzh4NVpka

TID:[-1234] [] [2016-03-14 09:20:11,243] 调试 {org.wso2.carbon.identity.oauth2.util.OAuth2Util} - 客户端 凭据已添加到客户端 ID 的缓存中: CHao3ZYUVY6tRX4jJ82yzh4NVpka

TID:[-1234] [] [2016-03-14 09:20:11,245] 调试 {org.wso2.carbon.identity.oauth2.token.handlers.grant.RefreshGrantHandler} - 为具有客户端 ID 的客户端提供的刷新令牌无效:CHao3ZYUVY6tRX4jJ82yzh4NVpka

TID:[-1234] [] [2016-03-14 09:20:11,245] 调试 {org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer} - 无效 客户 ID 提供的赠款:CHao3ZYUVY6tRX4jJ82yzh4NVpka

TID:[-1234] [] [2016-03-14 09:20:11,246] 调试 {org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer} - OAuth-错误代码=invalid_grant 客户端 ID=CHao3ZYUVY6tRX4jJ82yzh4NVpka grant-type=refresh_token scope=openid

【问题讨论】:

  • 嗨汉克。你有没有找到解决方案?
  • @JonathanWilliams 查看我对此的重新发送解决方案,看看它是否能解决您的问题。
  • 乔纳森,很抱歉延迟回复。我还没有找到该设备的可行解决方案。但是,如果您有原始身份验证请求的会话 cookie(Web 应用程序),并在刷新令牌期间传递这些 cookie,那么它就可以工作。

标签: wso2 wso2is


【解决方案1】:

问题已经过时了......希望在这么长的时间之后它可以帮助其他人;)。 我遇到过同样的问题。但是,我通过指定确切的refresh token 解决了这个问题。值得注意的是refresh_tokenaccess token 不同。如果您没有/不知道您的refresh_token,请使用此curl 命令获取它。

curl -k -d "grant_type=password&username=<username>&password=<password>" -H "Authorization: Basic SVpzSWk2SERiQjVlOFZLZFpBblVpX2ZaM2Y4YTpHbTBiSjZvV1Y4ZkM1T1FMTGxDNmpzbEFDVzhh" -H "Content-Type: application/x-www-form-urlencoded" https://localhost:8243/token

响应将是这样的: { "scope": "default", "token_type": "Bearer", "expires_in": 2604, "refresh_token": "7d6e9047d44a84e6bae7e80e3996182d", "access_token": "4255a34923eb464b6dc2983acffef4d8" }

然后在您的 renew 令牌 curl 调用中使用该 refresh_token。 有关第一个 curl 请求的更多详细信息here 和平.V.

【讨论】:

  • 我确实使用了刷新令牌而不是访问令牌来刷新呼叫。值得注意的是,您使用的授权类型是密码授权,您必须拥有客户端凭据(用户名和密码)。我的用例是使用授权类型“授权”代码,实际的身份验证服务器可以是 WSO2 身份服务器、Facebook、Twitter 或任何支持令牌 (OpenID/OAuth2) 的第三方系统
【解决方案2】:

请查看此blog,其中解释了 cURL 命令及其内容。希望此博客能够解决您的问题。

【讨论】:

  • 我已经尝试了您博客中描述的 curl 命令以及我原始帖子中提到的链接;但是问题仍然存在。
猜你喜欢
  • 2017-12-25
  • 1970-01-01
  • 2014-03-26
  • 2019-10-17
  • 2013-11-19
  • 1970-01-01
  • 2023-02-02
  • 2020-04-24
  • 2020-09-08
相关资源
最近更新 更多