从 Keycloak 访问令牌中获取客户端会话 ID
Posted
技术标签:
【中文标题】从 Keycloak 访问令牌中获取客户端会话 ID【英文标题】:Get client session id from Keycloak access token 【发布时间】:2018-03-25 15:10:46 【问题描述】:参考 Keycloak 的 documentation 进行帐户链接,我需要从访问令牌中获取 user session id 和 client 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:使用 keycloak-admin 为用户生成访问令牌
如何在 Keycloak 中添加 ipAddres o clientAddress 令牌