我有春季启动应用程序,我使用 keycloak 作为身份验证。供应商。
对于我的领域,我已将 FACEBOOK或GOOGLE设置为身份提供商。
我想知道如何找出用户使用的身份提供者 - 不是通过keycloak管理控制台,而是在运行时。
例如:
用户A - FACEBOOK
用户B - FACEBOOK
用户C - GOOGLE
答案 0 :(得分:1)
映射访问令牌中提供的元数据,例如facebook / google用户ID,并将这些元素导入keycloak用户。然后,如果您将此元数据提供给客户端,则可以查看所使用的身份代理。
https://keycloak.gitbooks.io/server-adminstration-guide/content/topics/identity-broker/mappers.html
答案 1 :(得分:1)
您可以将“用户会话注释”映射器设置为客户的映射器。 将“用户会话注释”字段设置为:identity_provider
注意:您可以在“用户会话注释”字段中使用identity_provider_identity来将其用户名从身份提供者https://www.keycloak.org/docs/3.0/server_admin/topics/identity-broker/session-data.html
中获取。答案 2 :(得分:0)
我知道这个问题很老,但我找到了解决您问题的替代解决方案(假设您尝试通过 Java/Spring 获取信息)。假设您分别有 user
、realm
和 session
类型的具体变量 UserModel
、RealmModel
和 KeyCloakSession
。然后您可以获得与您的用户关联的所有联合身份的集合:
Set<FederatedIdentityModel> identitySet = session.users().getFederatedIdentities(user, realm);
每个 FederatedIdentityModel
实例都有一个 #getIdentityProvider
方法,允许您获取相关 IdP 的名称。