【问题标题】:Refresh access_token via refresh_token in Keycloak通过 Keycloak 中的 refresh_token 刷新 access_token
【发布时间】:2018-12-25 10:45:27
【问题描述】:

如果用户的access_token 过期并且用户想要保持登录,我需要让用户保持登录。如何在Keycloak 上使用refresh_token 获得最新更新的access_token

我正在使用vertx-auth 进行身份验证,在vert.x 上使用Keycloak。是否可以使用vertx-authKeycloak 的REST API 本身刷新access_token?或者这个的另一个实现是什么?

【问题讨论】:

    标签: java oauth-2.0 keycloak vert.x


    【解决方案1】:

    @maslick 是正确的,您也必须提供客户端密码,在这种情况下不需要授权标头:

    http://localhost:8080/auth/realms/{realm}/protocol/openid-connect/token

    如果刷新令牌过期,则返回:

    如果您不添加密码,即使刷新令牌是正确的,您也会获得 401 未授权

    【讨论】:

    • 我刚刚测试过,如果颁发令牌的客户端是机密的,你只需要客户端机密
    【解决方案2】:

    keycloak 具有 REST API,用于使用 refresh_token 创建 access_token。这是一个POST endpoint with application/x-www-form-urlencoded

    这是它的外观:

    Method: POST
    URL: https://keycloak.example.com/auth/realms/myrealm/protocol/openid-connect/token
    Body type: x-www-form-urlencoded
    Form fields:    
    client_id : <my-client-name>
    grant_type : refresh_token
    refresh_token: <my-refresh-token>
    

    这将使用刷新令牌为您提供新的访问令牌。

    注意:如果您的刷新令牌已过期,它将引发 400 异常,因为您可以让用户再次登录。

    在 Postman 中查看一个示例,您可以使用它开发相应的 API。

    【讨论】:

    • 我用2.5.4 试过这个,它仍然需要这个请求的客户端密码。现在可以理解为什么在提供刷新令牌时需要客户端密码。
    • 只有在 机密 客户端时才需要客户端密码。 公共客户端不需要客户端密码。
    • 有人可以解释为什么在为机密客户端刷新令牌时需要客户端密码吗?
    • @all ,为什么刷新token是jwt格式?无状态,但 google 和 auth0 使用有状态。
    • Keycloak 中的 @Kimble 机密客户端 用于服务器应用程序,其中存储客户端机密是安全的。看看文档(这里)[keycloak.org/docs/6.0/server_admin/#oidc-clients]
    【解决方案3】:

    我尝试使用 4.8.2.Final,即使之前的访问令牌为“Bearer”,它也会提供以下unauthorized_client。 然后我尝试在 Authorization 标头中使用Basic YXBwLXByb3h5OnNlY3JldA==。 然后它起作用了,但我仍然不确定我做对了。

    【讨论】:

    • 对于授权标头,这一切都归结为服务器在标头值中查找的内容。如果这可行,那么您可能没有错。
    • 您可能使用的是机密客户端,因此您需要在请求中包含client_secret
    • 如果我必须为机密客户端传递 client_secret,为什么有人要使用刷新令牌? IMO,Keycloak 应该通过传递 client_id 和 refresh_token 来返回 access_token,因为它就像一个秘密。
    猜你喜欢
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 2020-05-17
    • 2017-04-12
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多