【问题标题】:Get username from keycloak session in NodeJS从 NodeJS 中的 keycloak 会话获取用户名
【发布时间】:2016-06-02 00:29:53
【问题描述】:

有没有类似的东西:

request.getUserPrincipal().getName()       // Java

当我们使用 connect-keycloak 和 express 中间件时,在 Node 中获取用户名?

【问题讨论】:

  • 我不是 Java 开发人员,但您想问是否有办法将值从中间件传递到路由中调用的下一个函数/类?
  • +1 我们还需要从 JWT 令牌中获取用户信息。此刻我们再次解析承载...不是很好。也许我们应该提出一个问题 - 如果他们会激活 github 上的窗格;)

标签: node.js express keycloak


【解决方案1】:

我也遇到了这个问题。

我确实深入研究了中间件代码并试图找到类似的东西。原来request对象被kauth.grant修改和追加。

console.log('req.kauth.grant') 打印出来:

{
access_token: {
    token: 'kasdgfksj333',
    clientId: 'mobile',
    header: {
        alg: 'RS256'
    },
    content: {
        jti: '33389eb6-3611-4de2-b913-add9283c3de0',
        exp: 1464883174,
        nbf: 0,
        iat: 1464882874,
        iss: 'http://docker:9090/auth/realms/test',
        aud: 'test-client',
        sub: '333604a0-b527-4afb-a04e-5e4ebf06ce9c',
        typ: 'Bearer',
        azp: 'test-client',
        session_state: '1cd35952-8e42-44f1-ad15-aaf9964bfefa',
        client_session: '943f1213-f556-4021-bbc6-2355146ab955',
        'allowed-origins': [],
        resource_access: [Object],
        name: 'Test User',
        preferred_username: 'user',
        given_name: 'Test',
        family_name: 'User',
        email: 'foo@bar.com'
    },
    signature: < Buffer 45 1 b 3 d d7 4 f f9 d1 63 44 ad a9 ca b8 c4 67 88 ba e9 5 d 64 8 d a0 a9 75 a1 79 cf 18 52 d5 f7 f0 08 71 1 d 79 bd 59 e9 5 a f8 25 72 dd e5 06 71 4 f b7 f1 47... > ,
    signed: 'eyJhbGcfOiJSUzf1NiJ9.eyJqdGkiOsJmYmY4OWViwi0zNjExLTrkZTItYjkxMy1hZGQ5MjgzYzNkZTAiLCJleHAiOjE0NjQ4ODMxNzQsIm5iZiI6MCwiaWF0IjoxNDY0ODgyODc0LCJpc3MiOiJodHRwOi8vZG9ja2VyaG9zdDo5MDgwL2F1dGgvcmVhbG1zL3JoY2FycyIsImF1ZCI6InJoY2Fycy12ZWhpY2xlLW93bmVyLWlvcyIsInN1YiI6IjkxMjYwNGEwLWI1MjctNGFmYi1hMDRlLTVlNGViZjA2Y2U5YyIsInR5cCI6IkJlYXJlciIsImF6cCI6InJoY2Fycy12ZWhpY2xlLW93bmVyLWlvcyIsInNlc3Npb25fc3RhdGUiOiIxY2QzNTk1Mi04ZTQyLTQ0ZjEtYWQxNS1hYWY5OTY0YmZlZmEiLCJjbGllbnRfc2Vzc2lvbiI6Ijk0M2YxMjEzLWY1NTYtNDAyMS1iYmM2LTIzNTUxNDZhYjk1NSIsImFsbG93ZWQtb3JpZ2lucyI6W10sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50Iiwidmlldy1wcm9maWxlIl19fSwibmFtZSI6IlRlc3QgVXNlciIsInByZWZlcnJlZF91c2VybmFtZSI6IjEyMzEyMyIsImdpdmVuX25hbWUiOiJUZXN0IiwiZmFtaWx5X25hbWUiOiJVc2VyIiwiZW1haWwiOiJmb29iYXJ1c2VyQGFyY29uc2lzLmNvbSJ9'
},
refresh_token: undefined,
id_token: undefined,
token_type: undefined,
expires_in: undefined,
__raw: '{"access_token":"eyJhbGciOiJSUzI3NiJ2.eyJqdGki4iJmYmY4OWriNi0zNjExLTRkZTItYjkxMy1hZGQ5MjgzYzNkZTAiLCJleHAiOjE0NjQ4ODMxNzQsIm5iZiI6MCwiaWF0IjoxNDY0ODgyODc0LCJpc3MiOiJodHRwOi8vZG9ja2VyaG9zdDo5MDgwL2F1dGgvcmVhbG1zL3JoY2FycyIsImF1ZCI6InJoY2Fycy12ZWhpY2xlLW93bmVyLWlvcyIsInN1YiI6IjkxMjYwNGEwLWI1MjctNGFmYi1hMDRlLTVlNGViZjA2Y2U5YyIsInR5cCI6IkJlYXJlciIsImF6cCI6InJoY2Fycy12ZWhpY2xlLW93bmVyLWlvcyIsInNlc3Npb25fc3RhdGUiOiIxY2QzNTk1Mi04ZTQyLTQ0ZjEtYWQxNS1hYWY5OTY0YmZlZmEiLCJjbGllbnRfc2Vzc2lvbiI6Ijk0M2YxMjEzLWY1NTYtNDAyMS1iYmM2LTIzNTUxNDZhYjk1NSIsImFsbG93ZWQtb3JpZ2lucyI6W10sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50Iiwidmlldy1wcm9maWxlIl19fSwibmFtZSI6IlRlc3QgVXNlciIsInByZWZlcnJlZF91c2VybmFtZSI6IjEyMzEyMyIsImdpdmVuX25hbWUiOiJUZXN0IiwiZmFtaWx5X25hbWUiOiJVc2VyIiwiZW1haWwiOiJmb29iYXJ1c2VyQGFyY29uc2lzLmNvbSJ9.RRs910_50WNEranKuMRniLrpXWSNoKl1oXnPGFLV9_AIcR15vVnpWvglct3lBnFPt_FH6QPJTmp7i-8mRTIDoIL8jtmEtJ8VfE2ZYX5WN3RlxPFQc5kCOZUQiV55eZALOCSTpm2HIw1eLhBVs4Is8RMJoWy8xj3k4pkOqqll8NY__TJdTG7Iihj0lReblyaW34OpSxkAYoqYaayox0H_7UbnpSAIL0BqBL41lDPH4mXouUX3i0fFbLOt_MnAtPrdFYTez7OVmKhZx7gavdQEkHEGK8thgagnCrycejUqTO0YUeOsasQ2NK9KLPBIEA0eX_p2l2yDYhlJR15stQ3AHA"}',
store: [Function],
unstore: [Function]
}

当然 - 这对开发人员不友好,但您可以通过以下方式访问用户名 req.kauth.grant.access_token.content.preferred_username。这导致user。

我会将这个问题报告给主要贡献者。 (keycloak中间件Github Repo https://github.com/keycloak/keycloak-nodejs-connect)

更新 keycloak 项目的主要贡献者刚刚回答了我。如果您发现任何其他问题 - 请在此处解决: https://issues.jboss.org/projects/KEYCLOAK

对于 node.js 适配器: https://issues.jboss.org/browse/KEYCLOAK-2833?jql=project%20%3D%20KEYCLOAK%20AND%20component%20%3D%20%22Adapter%20-%20Node.js%22

更新 2:2021 年 3 月 15 日 报告 keycloak 中间件的问题现在需要 RedHat 用户帐户。由于这个帖子似乎仍然处于活动状态,而且我不再关注那个话题(经过了这么多时间),我只能建议在那里设置一个帐户报告错误。

https://issues.jboss.org/projects/KEYCLOAK

希望我能帮上忙。

干杯
奥兰多
?

【讨论】:

  • 谢谢,这根本没有记录。
  • 有趣,大约 5 年之后有什么进展吗?目前将用户 ID 设为 req.kauth.grant.access_token.content.jti - 看起来很笨重。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 2019-03-11
  • 2021-04-06
  • 2022-11-16
  • 1970-01-01
  • 2016-07-10
相关资源
最近更新 更多