【问题标题】:SamlCredential does not retrieve group attributes from Okta SAML responseSamlCredential 不从 Okta SAML 响应中检索组属性
【发布时间】: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 个组的一部分怎么办?

【问题讨论】:

    标签: saml-2.0 spring-saml okta okta-api


    【解决方案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 获得组列表。然而,获得所有组的问题仍然存在。请参阅我的编辑部分。
    • 请看我编辑的帖子。希望这能解决您的问题。
    猜你喜欢
    • 2015-09-14
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多