SamlCredential 不从 Okta SAML 响应中检索组属性
Posted
技术标签:
【中文标题】SamlCredential 不从 Okta SAML 响应中检索组属性【英文标题】:SamlCredential does not retrieve group attributes from Okta SAML response 【发布时间】:2018-06-30 21:21:37 【问题描述】:我使用 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
filter *,我会得到空值。
但是,如果我将 contains
过滤器与 test 一起使用,我会得到 test1(如果用户是两个组的路径,则得到 test2)。
在组的情况下不支持通配符吗?
如果在上述情况下用户是所有 3 个组的一部分怎么办?
【问题讨论】:
【参考方案1】:我不是 OKTA 的专家,但我为我的一个客户工作了几周。我用 * 进行了测试,但它只适用于过滤器正则表达式。对于其他过滤器,我从未成功使用 *.例如,没有 * 的配置对我来说非常有效。
OKTA CONFIG
我使用了代码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]);
结果是:
祝你有美好的一天
【讨论】:
您可以使用getAttributeAsStringArray
获得组列表。然而,获得所有组的问题仍然存在。请参阅我的编辑部分。
请看我编辑的帖子。希望这能解决您的问题。以上是关于SamlCredential 不从 Okta SAML 响应中检索组属性的主要内容,如果未能解决你的问题,请参考以下文章