繁体   English   中英

从JavaScript(使用Javascript适配器)Keycloak检索自定义属性

[英]Retrieve Custom Attribute from JavaScript (using Javascript Adapter) Keycloak

我有一个keycloak用户,其自定义属性如下所示。 keycloak自定义属性

我使用Reactjs作为前端。 我想从javascript端检索自定义属性。 像这样的回答说明。

https://stackoverflow.com/a/32890003/2940265

但我无法在javascript端找到如何做到这一点。

我在Chrome中调试但是找不到自定义属性的合适结果。

请帮忙

我找到了答案。

我会在这里发帖,因为有人可能觉得它很有用。

好吧,您可以向用户添加自定义属性,但您需要额外的配置才能从javascript端检索它。 为了初学者的轻松,我将从添加客户编写答案,从javascript检索属性(在我的情况下反应js)。

我们将自定义属性添加到用户。

登录keycloak并选择你的领域(如果你有多个领域,除非你会自动登录领域)

之后选择用户 - >查看所有用户在我的情况下选择你的用户它是Alice选择属性并添加自定义属性(在我的情况下,我添加了自定义属性调用companyId,如下所示)

在此输入图像描述

现在单击“ 保存”

现在我们必须使用keycloak客户端映射自定义属性。 要使用keycloak前端,您必须在客户端 (左侧栏)中拥有客户端。如果您还没有,则必须为此配置客户端。 在我的情况下,我的客户端是测试应用程序

因此选择客户端 - >测试应用程序 - >映射器现在我们必须创建Mapper。 单击“ 创建”

对于令牌声明名称,您应该提供自定义属性键(在我的情况下,它是companyId ),我使用companyId作为名称,域名角色前缀,令牌声明名称 您应该选择Mapper Type中的 User AttributeClaim JSON Type的 String

之后,单击“保存”。 现在,您可以从javascript获取自定义属性。

假设您的keycloak JavaScript对象是keycloak ,您可以使用keycloak获取companyId。

let companyId = keyCloak.idTokenParsed.companyId;

示例代码如下(我在react.js中的代码)

keyCloak.init({
    onLoad: 'login-required'
}).success(authenticated => {
    if (authenticated) {
        if (hasIn(keyCloak.tokenParsed, 'realm_access')) {
            if (keyCloak.tokenParsed.realm_access.roles === []) {
                console.log("Error: No roles found in token")
            } else {
                let companyId = keyCloak.idTokenParsed.companyId;
            }
        } else {
            console.log("Error: Cannot parse token");
        }
    } else {
        console.log("Error: Authentication failed");
    }
}).error(e => {
    console.log("Error: " + e);
    console.log(keyCloak);
});

希望有人觉得这个答案很有用,因为我可以找到JavaScript的答案。 快乐编码:)

可以通过用户配置文件检索属性:

keycloak = ... // Keycloak instance

keycloak.loadUserProfile().success(function(profile) {
    let companyId = profile.attributes.companyId[0];
    alert('Company Id: ' + companyId);
}).error(function() {
    alert('Failed to load user profile');
});

每个属性都是一个字符串数组。 因此,除非您有多个公司ID,否则数组的长度为1,相关数据位于元素0中。

除了自定义属性,以下元素也可用作用户配置文件的一部分:

  • ID
  • 用户名
  • 电子邮件
  • 名字
  • 启用
  • emailVerified
  • TOTP
  • createdTimestamp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM