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

时间:2018-11-09 11:15:08

标签: javascript reactjs keycloak

我有一个具有以下自定义属性的keycloak用户。 keycloak custom attribute

我在前端使用Reactjs。我想从JavaScript端检索自定义属性。像这样的答案状态。

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

但是我在javascript方面找不到方法。

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

请帮助

2 个答案:

答案 0 :(得分:2)

我找到了答案。

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

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

让我们向用户添加自定义属性。

登录到密钥斗篷并选择您的领域(如果您有多个领域,除非您将自动登录到该领域)

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

enter image description here

现在单击保存

现在,我们必须使用Keycloak客户端映射“自定义”属性。 要前端使用密钥斗篷,您必须在 Clients (左侧栏)中拥有客户端 如果没有,则必须为此配置一个客户端。就我而言,我的客户是 test-app

为此选择 Clients-> test-app-> Mappers 现在我们必须创建Mapper。点击创建

对于令牌声明名称,您应该提供自定义属性键(在我的情况下为 companyId ),我将companyId用作名称,领域角色前缀,令牌声明名称。您应该在映射器类型中选择用户属性,并为声明JSON类型

选择字符串

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

假设您的密钥库JavaScript对象为密钥库,则可以使用密钥库获取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的答案。编码愉快:)

答案 1 :(得分:1)

可以通过用户个人资料检索属性:

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
  • 用户名
  • 电子邮件
  • 名字
  • 姓氏
  • 已启用
  • 电子邮件已验证
  • totp
  • createdTimestamp