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

OpenID 支持

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

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

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

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

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

您应该能够使用该站点登录以进行身份验证。 还可以通过在元素上设置属性来选择特定的 bean 以使用 OpenID。 请注意,我们在上述用户配置中省略了 password 属性,因为这组用户数据仅用于为用户加载权限。 将在内部生成一个随机密码,以防止您意外地将此用户数据用作配置中其他位置的身份验证源。myopenid.comUserDetailsServiceuser-service-refopenid-loginspring-doc.cn

属换

支持 OpenID 属换。 例如,以下配置将尝试从 OpenID 提供程序检索电子邮件和全名,以供应用程序使用:spring-doc.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/。 如果必须检索某个属性才能成功进行身份验证,则可以设置该属性。 支持的确切架构和属性将取决于您的 OpenID 提供商。 属性值作为身份验证过程的一部分返回,之后可以使用以下代码进行访问:requiredspring-doc.cn

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

我们可以从 SecurityContextHolder 获取 。 该包含属性类型和检索到的值(或多值属性中的值)。 您可以提供多个元素,每个元素都有一个属性。 它包含一个正则表达式,该表达式将与用户提供的 OpenID 标识符进行匹配。 有关示例配置,请参阅代码库中的 OpenID 示例应用程序,其中为 Google、Yahoo 和 MyOpenID 提供程序提供了不同的属性列表。OpenIDAuthenticationTokenOpenIDAttributeattribute-exchangeidentifier-matcherspring-doc.cn