服务器使用WSO2 Identity Server获取带有访问令牌的刷新令牌

时间:2020-02-06 01:30:52

标签: oauth-2.0 wso2 wso2is

我正在进行以下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获得刷新令牌?

3 个答案:

答案 0 :(得分:4)

该规范指出,client_credentials授予类型不会返回刷新令牌。

这是有道理的,因为刷新令牌的目的是不打扰用户再次登录。但是有了client_credentials,您就可以获取另一个访问令牌。

same spotify authorization page

答案 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)"