从JavaScript检索自定义属性(使用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的答案。快乐编码:))
相关文章