gpt4 book ai didi

spring-security - 自定义 SAMLUserDetailsS​​ervice 未填充自定义 UserDetails

转载 作者:行者123 更新时间:2023-12-04 19:02:47 28 4
gpt4 key购买 nike

我有一个 Spring 项目,我正在将当前的身份验证转换为使用 SAML2。

就身份验证而言,我已经完成了所有工作,但是我很难让 SAML2 扩展将我的自定义 UserDetails 对象插入到 Spring Security Context 身份验证对象中。

我有一个自定义的 UserDetailsS​​ervice,定义如下:

public class SAMLAuthManager implements SAMLUserDetailsService {

private static final Logger logger = Logger.getLogger(JDBCAuthManager.class);

@Override
public Object loadUserBySAML(SAMLCredential credential) throws UsernameNotFoundException {
logger.info("Credential attributes: " + credential.getAttributes());
for (int x = 0; x < credential.getAttributes().size(); x++) {
Attribute attr = credential.getAttributes().get(x);
List<XMLObject> attrValues = attr.getAttributeValues();
StringBuilder strBuilder = new StringBuilder();
for (int g = 0; g < attrValues.size(); g++) {
XMLObject currObj = attrValues.get(g);
strBuilder.append(currObj.toString()).append(",");
}
strBuilder.deleteCharAt(strBuilder.length() - 1);
logger.info(attr.getFriendlyName() + ", " + strBuilder.toString());
}
String username = credential.getNameID().getValue();
userWrapper.setStaff(s);
logger.info("Returning wrapper: " + userWrapper);
return userWrapper;
} else {
return null;
}
}

}

我还在我的安全上下文配置中配置了这个 userDetails:
    <bean id="samlAuthenticationProvider" class="org.springframework.security.saml.SAMLAuthenticationProvider">
<property name="userDetails" ref="samlUserDetails" />
</bean>

但是,当我检查 SecurityContextHolder、发布身份验证时,这一行:
SecurityContextHolder.getContext().getAuthentication().getCredentials();

返回 org.springframework.security.saml.SAMLCredential 类型的对象.

我检查了 Spring 是否用自定义对象( SecurityContextHolder.getContext().getAuthentication().getPrincipal() )填充了 Principal ,但它没有,这只是一个 String填充了用户名。

有任何想法吗?
谢谢

最佳答案

默认情况下,主体被强制为字符串(为了始终允许复制之前是不可序列化的 NameID 的主体)。

这可以通过设置 forcePrincipalAsString 来改变在 SAMLAuthenticationProviderfalse ,这将使 Spring SAML 包含您由 SAMLUserDetailsService 提供的对象作为 Authentication 中的校长目的。

调用 SAMLUserDetailsService 的结果在 SecurityContextHolder.getContext().getAuthentication().getDetails() 下始终可用.

关于spring-security - 自定义 SAMLUserDetailsS​​ervice 未填充自定义 UserDetails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33663165/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com