Мне нужно преобразовать членство в группе из внешнего каталога LDAP в атрибут SAML в сеансе SAML с помощью Keycloak. Для каждого пользователя будет неопределенное количество членств в группах. Имя группы будет иметь идентификатор арендатора для Amazon AWS и определенную роль для пользователя в Amazon (например, AWS-11111111111-Администратор), поэтому я совершенно уверен, что способ должен заключаться в использовании JavaScript Mapper в конфигурации клиента. и сделайте некоторую модификацию подстроки.
Пример для групп 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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я помог себе в этом. Самой большой проблемой для меня было отсутствие «тестовой кнопки» для проверки того, что делает код. Кроме того, обнаружив, что простой массив Java Script не повторяется в конце (кроме подсказок Mouse-Over).
Вы должны иметь в виду, что это интерпретатор 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;