Javascript 在KeyClope中将LDAP组成员身份转换为SAML属性

Javascript 在KeyClope中将LDAP组成员身份转换为SAML属性,javascript,saml,keycloak,mapper,Javascript,Saml,Keycloak,Mapper,我需要使用keydape将组成员身份从外部LDAP目录转换为SAML会话中的SAML属性。每个用户的组成员身份数将是未定义的。组名将具有Amazon AWS的租户ID和Amazon中用户的定义角色(例如AWS-11111111-Administrator),因此我非常确定,方法必须是在客户端配置中使用JavaScript映射器,并进行一些子字符串修改 有没有一种方法可以测试Javascript,而不必尝试出错/登录并检查SAML会话 如何在KeyClope的Javascript映射器中从LDA

我需要使用keydape将组成员身份从外部LDAP目录转换为SAML会话中的SAML属性。每个用户的组成员身份数将是未定义的。组名将具有Amazon AWS的租户ID和Amazon中用户的定义角色(例如AWS-11111111-Administrator),因此我非常确定,方法必须是在客户端配置中使用JavaScript映射器,并进行一些子字符串修改

  • 有没有一种方法可以测试Javascript,而不必尝试出错/登录并检查SAML会话
  • 如何在KeyClope的Javascript映射器中从LDAP用户处获取组作为字符串值
LDAP组示例(每个用户的多个组)

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

这是我自己做的。对我来说,最大的问题是缺少“测试按钮”来验证代码正在做什么。另外,发现一个简单的Java脚本数组在最后没有被迭代(鼠标悬停提示除外)

您需要记住,这是服务器端Nashorn解释器,因此它与通常在浏览器中运行的Javascript没有太大关系。。。对不起,我的问题可能不准确:

/**


 * 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;

这是我自己做的。对我来说,最大的问题是缺少“测试按钮”来验证代码正在做什么。另外,发现一个简单的Java脚本数组在最后没有被迭代(鼠标悬停提示除外)

您需要记住,这是服务器端Nashorn解释器,因此它与通常在浏览器中运行的Javascript没有太大关系。。。对不起,我的问题可能不准确:

/**


 * 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;