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

SamlCredential does not retrieve group attributes from Okta SAML response

我正在使用 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 过滤器 *,我得到空值。 但是,如果我将 contains 过滤器与 test 一起使用,我会得到 test1 (和 test2,如果用户是两个组的路径)。 在组的情况下不支持 wildchar 吗? 如果在上述情况下用户是所有 3 个组的一部分怎么办?

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

OKTA CONFIG

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

但我有一个问题,当我有超过一组时,我仍然得到一组。我想改为使用组列表。

编辑 - O6 Feb

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

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

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

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

结果是:

祝你有美好的一天