1

我使用这个 curl 命令在 keycloak 中检索用户的会话详细信息:

curl -X GET \
-H 'Authorization: Bearer $TOKEN' \
http://192.168.X.X:8080/auth/admin/realms/$REALM_NAME/users/$ID_OF_CLIENT/sessions

作为回应,我们有:

[{
  "id":"194d6b10-5b94-42c3-86d8-4d1780f70f52",
  "username":"admin",
  "userId":"e258f775-3597-4a72-a490-7bgd7c1cdfdb",
  "ipAddress":"192.168.X.X",
  "start":1589006511000,
  "lastAccess":1589007060000,
  "clients" :
       {
         "53d98bf8-fffd-484c-aae8-500a7cf7a8b6":"authz-servlet",
         "9bc56128-972e-41fe-8946-3ce4b5660e24":"authz-client-app3"
       }
 }]

现在我需要在会话信息中添加更多详细信息,例如登录用户的浏览器版本。有没有办法添加这些细节?

4

1 回答 1

0

我建议你看看userinfoOIDC 端点。与您当前的方法(使用带有管理令牌的 Admin REST Api)相比,它接受为最终用户颁发的令牌。如果它适合您,您将能够根据需要自定义端点输出。可在客户端设置中的客户端范围映射器选项卡中进行自定义。

默认情况下可用的映射器集相当广泛,但恐怕默认情况下 Keycloak 不会保留有关 UA 的信息,因此您必须开发自己的逻辑来在登录流程中提取它,而不是将其存储在用户会话中。如果你不熟悉 Keycloak Java SPI 的实现,你可以尝试通过 JS mapper 来实现你的逻辑。

https://www.keycloak.org/docs/latest/server_admin/index.html#_protocol-mappers_oidc-user-session-note-mappers https://www.keycloak.org/docs/latest/server_development/#_script_providers

AFAIK一些例子应该在keycloak github中

于 2020-05-11T08:54:03.513 回答