对于最新的稳定版本,请使用 Spring Security 6.4.3spring-doc.cadn.net.cn

OpenID 支持

OpenID 1.0 和 2.0 协议已被弃用,鼓励用户迁移到 spring-security-oauth2 支持的 OpenID Connect。

命名空间支持 OpenID 登录,可以代替基于表单的普通登录,也可以作为 OpenID 登录的补充,只需进行简单的更改:spring-doc.cadn.net.cn

<http>
<intercept-url pattern="/**" access="ROLE_USER" />
<openid-login />
</http>

然后,您应该向 OpenID 提供程序(例如 myopenid.com)注册自己,并将用户信息添加到您的内存中<user-service>:spring-doc.cadn.net.cn

<user name="https://jimi.hendrix.myopenid.com/" authorities="ROLE_USER" />

您应该能够使用myopenid.comsite 进行身份验证。 也可以选择特定的UserDetailsServicebean 来使用 OpenID,方法是将user-service-ref属性openid-login元素。 请注意,我们在上述用户配置中省略了 password 属性,因为这组用户数据仅用于为用户加载权限。 将在内部生成一个随机密码,以防止您意外地将此用户数据用作配置中其他位置的身份验证源。spring-doc.cadn.net.cn

属换

支持 OpenID 属换。 例如,以下配置将尝试从 OpenID 提供程序检索电子邮件和全名,以供应用程序使用:spring-doc.cadn.net.cn

<openid-login>
<attribute-exchange>
	<openid-attribute name="email" type="https://axschema.org/contact/email" required="true"/>
	<openid-attribute name="name" type="https://axschema.org/namePerson"/>
</attribute-exchange>
</openid-login>

每个 OpenID 属性的“类型”都是一个 URI,由特定架构确定,在本例中为 https://axschema.org/。 如果必须检索属性才能成功进行身份验证,则required属性。 支持的确切架构和属性将取决于您的 OpenID 提供商。 属性值作为身份验证过程的一部分返回,之后可以使用以下代码进行访问:spring-doc.cadn.net.cn

OpenIDAuthenticationToken token =
	(OpenIDAuthenticationToken)SecurityContextHolder.getContext().getAuthentication();
List<OpenIDAttribute> attributes = token.getAttributes();

我们可以获取OpenIDAuthenticationToken来自 SecurityContextHolder。 这OpenIDAttribute包含属性类型和检索到的值(如果是多值属性,则包含值)。 您可以提供多个attribute-exchange元素中,使用identifier-matcher属性。 它包含一个正则表达式,该表达式将与用户提供的 OpenID 标识符进行匹配。 有关示例配置,请参阅代码库中的 OpenID 示例应用程序,其中为 Google、Yahoo 和 MyOpenID 提供程序提供了不同的属性列表。spring-doc.cadn.net.cn