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

2022-03-27 00:00:00 reactjs keycloak javascript

我有一个密钥遮盖用户,具有如下所示的自定义属性。

我使用Reactjs作为前端。我想从javascript端检索自定义属性。就像这个答案所说的那样。

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

但我找不到如何在javascript端执行此操作。

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

请帮助


解决方案

我找到答案了。

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

您可以向用户添加自定义属性,但是需要额外的配置才能从javascript端检索它。对于初学者来说,我将编写从添加Customer到从javascript检索属性的答案(在我的示例中是reaction js)。

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

登录到keyloak并选择您的领域(如果您有多个领域,除非您将自动登录到领域)

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

现在单击保存

现在,我们必须使用密钥罩客户端映射自定义属性。 若要在前端使用密钥罩,您必须在客户端(左边栏)中有客户端 如果没有,则必须为此配置一个客户端。在我的案例中,我的客户端是test-app

为此选择客户端->test-app->映射器 现在我们必须创建映射器。单击创建

对于令牌声明名称,您应该提供您的自定义属性密钥(在我的示例中是companyId)为方便起见,我将companyId用于名称、领域角色前缀、令牌声明名称。您应该在映射器类型和声明JSON类型的字符串中选择用户属性

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

假设您的keyloak 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的答案。快乐编码:))

相关文章