从 Keycloak 访问令牌中获取客户端会话 ID

Posted

技术标签:

【中文标题】从 Keycloak 访问令牌中获取客户端会话 ID【英文标题】:Get client session id from Keycloak access token 【发布时间】:2018-03-25 15:10:46 【问题描述】:

参考 Keycloak 的 documentation 进行帐户链接,我需要从访问令牌中获取 user session idclient session id

但是,通过查看他们的javascript adapter source code,我只能在令牌上找到他们称之为session_state 的东西,这显然与sessionId 相同。

我认为这是他们所指的用户会话ID?如果是这样,我在哪里可以找到这个所谓的 client session id

【问题讨论】:

遇到了同样的问题。你找到解决办法了吗? 是的!原来它是客户ID。所以这样的事情应该可以工作:从访问令牌中提取用户会话ID和客户端会话ID(“aud”是客户端ID):const session_state, aud = JSON.parse(decodeURIComponent(escape(atob(accessToken.split('.') [1]))))创建base64哈希:Base64.stringify(sha256(nonce + session_state + aud + 'facebookOrWhatever'))您还需要使生成的base64编码哈希url友好(即 '+' 和 '/' 替换为 '-' 和 '_' 还删除任何尾随 '=' 字符) 【参考方案1】:

原来它是客户 ID。所以这样的事情应该可以工作:

从访问令牌中提取用户会话ID和客户端会话ID(“aud”是客户端ID):

const  session_state, aud  = JSON.parse(decodeURIComponent(escape(atob(accessToken.split(‌​'.') [1])))) 

创建base64哈希:

Base64.stringify(sha256(nonce + session_state + aud + 'facebookOrWhatever')) 

您还需要使生成的 base64 编码的哈希 url 友好(即 '+' 和 '/' 替换为 '-' 和 '_' 还删除任何尾随 '=' 字符)

【讨论】:

以上是关于从 Keycloak 访问令牌中获取客户端会话 ID的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Keycloak 获取 oauth 令牌

Keycloak:使用 keycloak-admin 为用户生成访问令牌

如何在 Keycloak 中添加 ipAddres o clientAddress 令牌

从 keycloak 获取访问令牌的 POST 请求失败

如何使用邮递员从 keycloak 获取访问令牌(授权码流)

Keycloak 客户凭证流程说明