我正在进行以下curl调用:
curl -k -d "grant_type=client_credentials" -H "Authorization: Basic <Encoded ID & Secret>)" https://MyIDPUrl/token
我得到以下答复:
{
"access_token":"MyAccessTokenHere",
"scope":"am_application_scope default",
"token_type":"Bearer",
"expires_in":3212
}
一切都很好,除了我没有获得刷新令牌。我尝试在网址中添加&scope=openid
,并在响应中添加了id_token,但未添加刷新令牌。
如何使用WSO2获得刷新令牌?
答案 0 :(得分:4)
该规范指出,client_credentials授予类型不会返回刷新令牌。
这是有道理的,因为刷新令牌的目的是不打扰用户再次登录。但是有了client_credentials,您就可以获取另一个访问令牌。
答案 1 :(得分:2)
是的,对于client_credentials授予类型,没有使用刷新令牌的用法。但是,如果要获取刷新令牌,则可以通过更改identity.xml(IS_Home / repository / conf / identity)中的配置来允许获取刷新令牌。
<SupportedGrantType>
<GrantTypeName>client_credentials</GrantTypeName>
<GrantTypeHandlerImplClass>org.wso2.carbon.identity.oauth2.token.handlers.grant.ClientCredentialsGrantHandler</GrantTypeHandlerImplClass>
<IsRefreshTokenAllowed>false</IsRefreshTokenAllowed>
<IdTokenAllowed>false</IdTokenAllowed>
</SupportedGrantType>
如果将IsRefreshTokenAllowed的值更改为true,则应返回刷新令牌。 (更改配置值后,需要重新启动服务器)。默认情况下为false,因为没有用户参与此授予类型的刷新令牌是没有用的。
答案 2 :(得分:0)
正如@Vaccano 所说,使用 client_credentials
授予类型不会返回刷新令牌。
相反,您可以使用 Password
授予类型,它会返回刷新令牌:
curl -k -X POST https://localhost:9443/oauth2/token
-d "grant_type=password&username=Username&password=Password"
-H "Authorization: Basic Base64(consumer-key:consumer-secret)"