# OpenID 支持
OpenID1.0 和 2.0 协议已被弃用,并鼓励用户迁移到 Spring-security-oAuth2 支持的 OpenID Connect。 |
---|
名称空间支持OpenID (opens new window)登录,而不是常规的基于表单的登录,或者除了基于表单的登录之外,只需要做一个简单的更改:
<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
站点登录以进行身份验证。通过在openid-login
元素上设置user-service-ref
属性,也可以选择特定的UserDetailsService
Bean 来使用 OpenID。请注意,我们在上面的用户配置中省略了 password 属性,因为这组用户数据仅用于为用户加载权限。将在内部生成一个随机密码,以防止你意外地将此用户数据用作配置中其他位置的验证源。
# 属性交换
支持 OpenID属性交换 (opens new window)。例如,下面的配置将试图从 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 属性的“type”都是一个 URI,由一个特定的模式决定,在本例中https://axschema.org/ (opens new window)。如果必须检索一个属性才能成功进行身份验证,则可以设置required
属性。支持的确切模式和属性将取决于你的 OpenID 提供程序。属性值作为身份验证过程的一部分返回,之后可以使用以下代码对其进行访问:
OpenIDAuthenticationToken token =
(OpenIDAuthenticationToken)SecurityContextHolder.getContext().getAuthentication();
List<OpenIDAttribute> attributes = token.getAttributes();
我们可以从SecurityContextholder 中得到OpenIDAuthenticationToken
。OpenIDAttribute
包含属性类型和检索到的值(或者在多值属性的情况下的值)。你可以提供多个attribute-exchange
元素,在每个元素上使用identifier-matcher
属性。这包含一个正则表达式,它将与用户提供的 OpenID 标识符进行匹配。参见代码库中的 OpenID 示例应用程序,以获得配置示例,该配置为 Google、Yahoo 和 MyOpenID 提供者提供了不同的属性列表。
← rememe-me 认证 匿名身份验证 →