keycloak更新token调用updateToken函数无效,解决办法

Posted ChangYan.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keycloak更新token调用updateToken函数无效,解决办法相关的知识,希望对你有一定的参考价值。

先来看看我之前无效的调用

然后看输出,一直是相等,说明token并没有更新,一直都是同一个token

而且看网络请求的地方,只有一个【token】

点开这个token,可以看到是页面初始化加载请求时的token,并不是更新后的token。

一般更新token都是用refreshToken去交换新的accessToken和refreshToken

然后看正确更新token的代码:

然后运行,可以看到token不相等了

而且去看网络请求,传递的数据确实是refresh_token

可以看到这样才是有效的更新token
下边放正确的代码:一定要注意那个-1,之前没有写,卡了我半天时间去找问题。

    const old_token = state.keycloak.token
    state.keycloak.updateToken(-1)
      .then(function() 
        const new_token = state.keycloak.token
        if (old_token === new_token) 
          console.log('相等')
         else 
          console.log('不相等')
        
      ).catch(function() 
        state.keycloak.logout()
      )

Keycloak,如果选择更新密码操作,则不返回访问令牌

【中文标题】Keycloak,如果选择更新密码操作,则不返回访问令牌【英文标题】:Keycloak, not returning access token if update password action selected 【发布时间】:2017-07-20 07:59:48 【问题描述】:

我正在调用/auth/realms/master/protocol/openid-connect/token,通过在正文中发送以下内容来获取访问令牌, grant_type=password&client_id=example-docker-jaxrs-app&username=user&password=password&client_secret=1d27aedd-11c2-4ed2-97d5-c586e1f9b3cd

但是当我从 keycloak 管理控制台向用户输入更新密码作为所需操作时,在尝试通过上述 api 获取令牌时出现以下错误,


    "error": "invalid_grant",
    "error_description": "Account is not fully set up"

还有一件事,2个设置有什么区别,临时密码和更新密码需要操作?

【问题讨论】:

【参考方案1】:

如果您将密码标记为临时密码,则会将用户对update password 的操作标记为必需。

并且在用户更新/设置密码之前,即此操作已完成,您将无法使用此用户获取访问令牌,因为该帐户未“完全设置”并且属于一种完成设置需要操作的中间状态。

【讨论】:

感谢您的回复,那么有人如何第一次验证用户名/密码。我不想使用 keycloak 屏幕我有自己的登录页面,我们正在使用 /token api 来验证用户名/密码。 您可以避免将密码标记为临时密码。不会向用户配置文件添加任何必需的操作,并且凭据可用于获取令牌 @ShaileshNarkhede 你找到解决办法了吗?如果是,您介意与我们分享))吗?提前致谢 如上评论所说,不要将密码标记为临时密码,则不会添加 updateAction 并返回访问令牌。【参考方案2】:

如果您想更新密码,请更新密码,不要将其标记为临时密码,如果您标记为临时密码,然后只需从“必需操作”框中删除更新密码即可。

【讨论】:

谢谢你的解决方案解决了我的问题【参考方案3】:

我在 ldap 用户联合方面也遇到了同样的问题,我查看了一些 SSO 表并从 user_required_action 中删除了数据并清除了用户缓存,它可以工作。

【讨论】:

以上是关于keycloak更新token调用updateToken函数无效,解决办法的主要内容,如果未能解决你的问题,请参考以下文章

通过 Keycloak 中的 refresh_token 刷新 access_token

使用 Keycloak 获取 id_token

Keycloak cookie:KEYCLOAK_SESSION、Oauth_token_request_state、KEYCLOAK_IDENTITY

基于微服务的环境中的 Keycloak 身份验证流程

keycloak - 用户通过身份验证后的 CODE_TO_TOKEN_ERROR

如何解决:无法读取节点 js 中未定义的属性“keycloak-token”?