Преобразование членства в группах LDAP в атрибуты SAML в Keycloak

Мне нужно преобразовать членство в группе из внешнего каталога LDAP в атрибут SAML в сеансе SAML с помощью Keycloak. Для каждого пользователя будет неопределенное количество членств в группах. Имя группы будет иметь идентификатор арендатора для Amazon AWS и определенную роль для пользователя в Amazon (например, AWS-11111111111-Администратор), поэтому я совершенно уверен, что способ должен заключаться в использовании 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
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
1 237
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме