我使用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 和 other1 。
如果我使用contains
过滤器*,我会得到null。
但是,如果我使用contains
过滤器与测试,我会 test1 (和 test2 ,如果用户是两个组的路径)。
如果是组,是否不支持wildchar?
如果在上述情况下用户是所有3个组的一部分会怎么样?
答案 0 :(得分:2)
我不是OKTA的专家,但我已经为我的一位客户工作了几个星期。我测试了*但它只适用于我的过滤器正则表达式。对于其他过滤器,我从未成功过*。例如,没有*的配置对我来说非常合适。
我使用了代码String str = credential.getAttributeAsString("Groups");
但我有一个问题,当我有一个以上的小组时,我仍然会得到一个小组。我希望有一个组列表。
编辑 - 2月6日
最后我重新测试了,我能够用正则表达式实现通配符,我使用了正则表达式过滤器:
在java中,我按照你的建议得到了这些组:
String[] str = credential.getAttributeAsStringArray("groups");
for(int i = 0; i< str.length; i++){
System.out.println(str[i]);
}
结果是:
度过美好的一天