SamlCredential不从Okta SAML响应中检索组属性

时间:2018-01-22 09:27:25

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

我使用Okta作为IDP,我已经配置了用户属性语句和组属性语句,如此

enter image description here

通过提供自定义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个组的一部分会怎么样?

1 个答案:

答案 0 :(得分:2)

我不是OKTA的专家,但我已经为我的一位客户工作了几个星期。我测试了*但它只适用于我的过滤器正则表达式。对于其他过滤器,我从未成功过*。例如,没有*的配置对我来说非常合适。

OKTA CONFIG

我使用了代码String str = credential.getAttributeAsString("Groups");

但我有一个问题,当我有一个以上的小组时,我仍然会得到一个小组。我希望有一个组列表。

编辑 - 2月6日

最后我重新测试了,我能够用正则表达式实现通配符,我使用了正则表达式过滤器:

OKTA GROUP CONFIGURATION

在java中,我按照你的建议得到了这些组:

         String[] str = credential.getAttributeAsStringArray("groups");

     for(int i = 0; i< str.length; i++){
         System.out.println(str[i]);
     }

结果是:

List of captured groups

度过美好的一天