对于最新的稳定版本,请使用 Spring Security 6.4.3! |
OpenID 支持
OpenID 1.0 和 2.0 协议已被弃用,鼓励用户迁移到 spring-security-oauth2 支持的 OpenID Connect。 |
命名空间支持 OpenID 登录,可以代替基于表单的普通登录,也可以作为 OpenID 登录的补充,只需进行简单的更改:
<http>
<intercept-url pattern="/**" access="ROLE_USER" />
<openid-login />
</http>
然后,您应该向 OpenID 提供程序(例如 myopenid.com)注册自己,并将用户信息添加到您的内存中<user-service>
:
<user name="https://jimi.hendrix.myopenid.com/" authorities="ROLE_USER" />
您应该能够使用myopenid.com
site 进行身份验证。
也可以选择特定的UserDetailsService
bean 来使用 OpenID,方法是将user-service-ref
属性openid-login
元素。
请注意,我们在上述用户配置中省略了 password 属性,因为这组用户数据仅用于为用户加载权限。
将在内部生成一个随机密码,以防止您意外地将此用户数据用作配置中其他位置的身份验证源。
属换
支持 OpenID 属换。 例如,以下配置将尝试从 OpenID 提供程序检索电子邮件和全名,以供应用程序使用:
<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 提供商。
属性值作为身份验证过程的一部分返回,之后可以使用以下代码进行访问:
OpenIDAuthenticationToken token =
(OpenIDAuthenticationToken)SecurityContextHolder.getContext().getAuthentication();
List<OpenIDAttribute> attributes = token.getAttributes();
我们可以获取OpenIDAuthenticationToken
来自 SecurityContextHolder。
这OpenIDAttribute
包含属性类型和检索到的值(如果是多值属性,则包含值)。
您可以提供多个attribute-exchange
元素中,使用identifier-matcher
属性。
它包含一个正则表达式,该表达式将与用户提供的 OpenID 标识符进行匹配。
有关示例配置,请参阅代码库中的 OpenID 示例应用程序,其中为 Google、Yahoo 和 MyOpenID 提供程序提供了不同的属性列表。