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 cookie:KEYCLOAK_SESSION、Oauth_token_request_state、KEYCLOAK_IDENTITY