SamlCredential не получает атрибуты группы из ответа SAML Okta
Я использую Okta в качестве IDP, и я настроил операторы атрибутов пользователя и атрибуты группы, как это
И предоставляя пользовательские детали samluserdetails, я могу получить пользовательские атрибуты, но не групповые атрибуты.
public class CustomSamlUserDetails implements SAMLUserDetailsService {
@Override
public Object loadUserBySAML(SAMLCredential cred) throws UsernameNotFoundException {
AppUser user = new AppUser();
user.setFirstName(cred.getAttributeAsString("firstName"));
user.setLastName(cred.getAttributeAsString("lastName"));
user.setLoginId(cred.getAttributeAsString("loginId"));
String groupname = cred.getAttributeAsString("role"); // comes null
return user;
}
}
Есть ли какая-то конфигурация, которую я пропустил или я неверно извлекаю информацию о группе?
РЕДАКТИРОВАТЬ: если я использую contains
фильтр с некоторыми символами, например, у меня есть 3 группы test1, test2 и другие1. Если я использую contains
фильтр *, я получаю ноль. Однако, если я использую contains
Фильтр с тестом, я получаю test1 (и test2, если пользователь является путем обеих групп). Wildchar не поддерживается в случае групп? Что если в приведенном выше случае пользователь был частью всех 3 групп?
1 ответ
Я не эксперт OKTA, но я работал пару недель для одного из моих клиентов. Я тестировал с *, но он работал только для фильтра Regex. Для других фильтров мне никогда не удавалось с *. Например, конфигурация без * отлично работала для меня.
Я использовал код String str = credential.getAttributeAsString("Groups");
Но у меня есть одна проблема: когда у меня больше одной группы, я все равно получаю одну группу. Я хочу иметь список групп вместо этого.
РЕДАКТИРОВАТЬ - O6 февраля
Наконец, я повторно протестировал и смог реализовать запись с использованием регулярных выражений с помощью регулярных выражений. Я использовал фильтр регулярных выражений:
В Java я получил группы, как вы предложили:
String[] str = credential.getAttributeAsStringArray("groups");
for(int i = 0; i< str.length; i++){
System.out.println(str[i]);
}
Результат:
Хорошего дня