我已经部署了SAML示例应用程序。我还在SSOCircle注册,并且能够正确登录。
在经过身份验证的页面上 - Principal的SAML属性不显示任何内容。在这里,我期待名字,姓氏等。
同样对于名称,原则,名称ID等所有内容 - 所有内容都显示我的电子邮件地址,我希望其中一个是我的用户ID。
Name: om.singh@XXXX.com
Principal: om.sXX@XXXX.com
Name ID: om.sXX@XXXX.com
任何建议,因为我需要获取名字,姓氏和用户ID。
此致 嗡
答案 0 :(得分:2)
您可以尝试以下代码:
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");
}
答案 1 :(得分:0)
如果要检查身份验证断言中返回的属性,可以在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));
}
...
...
}
好的,也许不是提取细节的最佳方法,但是您可以理解。