Spring Security SAML-未显示原则属性

Spring Security SAML-未显示原则属性,spring,saml,userid,Spring,Saml,Userid,我已经部署了SAML示例应用程序。我还注册了SSOCIRCE,能够正确登录 在经过身份验证的页面上,主体的SAML属性没有显示任何内容。在这里,我期待的名字,姓氏等 此外,对于名字、原则、姓名id等每一项内容,都会显示我的电子邮件地址,我希望其中一个是我的用户id Name: om.singh@XXXX.com Principal: om.sXX@XXXX.com Name ID: om.sXX@XXXX.com 任何建议,因为我需要获得名字、姓氏和用户id 问候 Om您可以尝试以

我已经部署了SAML示例应用程序。我还注册了SSOCIRCE,能够正确登录

在经过身份验证的页面上,主体的SAML属性没有显示任何内容。在这里,我期待的名字,姓氏等

此外,对于名字、原则、姓名id等每一项内容,都会显示我的电子邮件地址,我希望其中一个是我的用户id

Name:   om.singh@XXXX.com
Principal:  om.sXX@XXXX.com
Name ID:    om.sXX@XXXX.com
任何建议,因为我需要获得名字、姓氏和用户id

问候
Om

您可以尝试以下代码:

    public Object loadUserBySAML(SAMLCredential credential) throws UsernameNotFoundException 
    {
        String userName = credential.getNameID().getValue();
        String email     = credential.getAttributeAsString("EmailAddress");
        String firstName = credential.getAttributeAsString("FirstName");
        String lastName  = credential.getAttributeAsString("LastName");
}

如果要检查身份验证断言中返回的属性,在SAMLUserDetailsService的实现中,可以执行以下操作:

@Override
public Object loadUserBySAML(SAMLCredential samlCredential) throws UsernameNotFoundException {
    String userID = samlCredential.getNameID().getValue();
    for(Attribute attr : samlCredential.getAttributes()) {
        String[] attrVals = samlCredential.getAttributeAsStringArray(attr.getName());
        List<String> values = new ArrayList<>(Arrays.asList(attrVals));
        LOG.info(String.format("%s (%s) : %s", attr.getName(), attr.getFriendlyName(), values));
    }
    ...
    ...
}
@覆盖
公共对象loadUserBySAML(SAMLCredential SAMLCredential)引发UsernameNotFoundException{
字符串userID=samlCredential.getNameID().getValue();
for(属性attr:samlCredential.getAttributes()){
字符串[]attrVals=samlCredential.getAttributeAsStringArray(attr.getName());
列表值=新的ArrayList(Arrays.asList(attrVals));
LOG.info(String.format(“%s(%s):%s”、attr.getName()、attr.getFriendlyName()、values));
}
...
...
}
好吧,也许这不是提取细节的最佳方式,但你已经明白了