将 LDAP 组成员身份转换为 Keycloak 中的 SAML 属性
Transforming LDAP group memberships to SAML Attributes in Keycloak
我需要使用 Keycloak 将组成员从外部 LDAP 目录转换为 SAML 会话中的 SAML 属性。每个用户将有未定义数量的组成员资格。组名将有一个 Amazon AWS 的租户 ID 和 Amazon 中用户的定义角色(例如 AWS-11111111111-Administrator),所以我很确定必须使用 JavaScript Mapper在客户端配置中做一些子字符串修改。
- 有没有办法以某种方式测试 Javascript 而无需尝试错误/登录并检查 SAML 会话?
- 如何在 Keycloak 的 Javascript 映射器中从 LDAP 用户获取组作为字符串值?
LDAP 组示例(每个用户多个组)
AWS-11111111111-Administrator
AWS-11111111111-Contributer
SAML 属性必须如下所示:
arn:aws:iam::11111111111:saml-provider/ProviderName,arn:aws:iam::11111111111:role/Administrator
arn:aws:iam::11111111111:saml-provider/ProviderName,arn:aws:iam::11111111111:role/Contributer
我自己解决了这个问题。对我来说最大的问题是缺少 "test-button" 来验证代码在做什么。此外,发现一个简单的 Java 脚本数组在最后没有迭代(除了 Mouse-Over 提示说的)。
您需要记住,这是 server-side Nashorn 解释器,因此它与通常在浏览器中运行的 Java 脚本没有太大关系...对于其中可能存在的不准确之处,我们深表歉意我的问题:
/**
* Available variables:
* user - the current user
* realm - the current realm
* clientSession - the current clientSession
* userSession - the current userSession
* keycloakSession - the current userSession
*/
//insert your code here...
// use the Identifier variable to filter the relevant groups for this client
var identifier = 'aws';
var StringArray = Java.type("java.lang.String[]");
var ArrayList = Java.type('java.util.ArrayList');
var GroupSet = user.getGroups();
var Output = new ArrayList();
var identifier = identifier.toLowerCase();
for each (var group in GroupSet) {
if (group.getName().toLowerCase().contains(identifier)){
var GroupNameArray = (group.getName().split('-'));
var tenant = GroupNameArray[2];
var role = GroupNameArray[3];
Output.add("Arn:aws:iam::"+tenant+":saml-provider/company,arn:aws:iam::"+tenant+":role/"+role);
}
}
Output;
我需要使用 Keycloak 将组成员从外部 LDAP 目录转换为 SAML 会话中的 SAML 属性。每个用户将有未定义数量的组成员资格。组名将有一个 Amazon AWS 的租户 ID 和 Amazon 中用户的定义角色(例如 AWS-11111111111-Administrator),所以我很确定必须使用 JavaScript Mapper在客户端配置中做一些子字符串修改。
- 有没有办法以某种方式测试 Javascript 而无需尝试错误/登录并检查 SAML 会话?
- 如何在 Keycloak 的 Javascript 映射器中从 LDAP 用户获取组作为字符串值?
LDAP 组示例(每个用户多个组)
AWS-11111111111-Administrator
AWS-11111111111-Contributer
SAML 属性必须如下所示:
arn:aws:iam::11111111111:saml-provider/ProviderName,arn:aws:iam::11111111111:role/Administrator
arn:aws:iam::11111111111:saml-provider/ProviderName,arn:aws:iam::11111111111:role/Contributer
我自己解决了这个问题。对我来说最大的问题是缺少 "test-button" 来验证代码在做什么。此外,发现一个简单的 Java 脚本数组在最后没有迭代(除了 Mouse-Over 提示说的)。
您需要记住,这是 server-side Nashorn 解释器,因此它与通常在浏览器中运行的 Java 脚本没有太大关系...对于其中可能存在的不准确之处,我们深表歉意我的问题:
/**
* Available variables:
* user - the current user
* realm - the current realm
* clientSession - the current clientSession
* userSession - the current userSession
* keycloakSession - the current userSession
*/
//insert your code here...
// use the Identifier variable to filter the relevant groups for this client
var identifier = 'aws';
var StringArray = Java.type("java.lang.String[]");
var ArrayList = Java.type('java.util.ArrayList');
var GroupSet = user.getGroups();
var Output = new ArrayList();
var identifier = identifier.toLowerCase();
for each (var group in GroupSet) {
if (group.getName().toLowerCase().contains(identifier)){
var GroupNameArray = (group.getName().split('-'));
var tenant = GroupNameArray[2];
var role = GroupNameArray[3];
Output.add("Arn:aws:iam::"+tenant+":saml-provider/company,arn:aws:iam::"+tenant+":role/"+role);
}
}
Output;