Преобразование членства в группах LDAP в атрибуты SAML в Keycloak - PullRequest
0 голосов
/ 10 мая 2019

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

  • Есть ли способ как-то протестировать Javascript, не пытаясь сделать ошибку / войти в систему и проверить сеанс SAML?
  • как получить группы в виде строковых значений от пользователя LDAP в Javascript Mapper в Keycloak?

Пример для групп 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

1 Ответ

0 голосов
/ 20 мая 2019

Я помог себе с этим. Самой большой проблемой для меня было отсутствие «кнопки-теста» для проверки того, что делает код. Кроме того, обнаружение того, что простой массив Java Script Array не повторяется в конце (кроме подсказок при наведении мыши).

Вы должны иметь в виду, что это серверный интерпретатор 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...