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 个组 test1test2other1。 如果我使用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 响应中检索组属性的主要内容,如果未能解决你的问题,请参考以下文章

zuul + okta +springboot - OKTA 重定向 uri 问题 404

为多租户实施 Okta 身份验证

如何使用 nodejs 和 okta 进行应用程序注销

Okta 是不是使用 Passport.js?

302 Okta 重定向 - CORS 问题

如何为 Okta 自动刷新不记名令牌