28.3.2 单点登陆

OAuth2客户端可用于从提供商抓取用户详情,然后转换为Spring Security需要的Authentication token。上述提到的资源服务器通过user-info-uri属性来支持该功能,这是基于OAuth2的单点登陆(SSO)协议最基本的,Spring Boot提供的@EnableOAuth2Sso注解让它更容易实践。通过添加该注解及端点配置(security.oauth2.client.*),Github客户端就可以使用/user/端点保护它的所有资源了:

  1. security:
  2. oauth2:
  3. ...
  4. resource:
  5. userInfoUri: https://api.github.com/user
  6. preferTokenInfo: false

由于所有路径默认都处于保护下,也就没有主页展示那些未授权的用户,进而邀请他们去登陆(通过访问/login路径,或security.oauth2.sso.login-path指定的路径)。

为了自定义访问规则或保护的路径(这样你就可以添加主页),你可以将@EnableOAuth2Sso添加到一个WebSecurityConfigurerAdapter,该注解会包装它,增强需要的地方以使/login路径工作。例如,这里我们允许未授权的用户访问主页/,其他的依旧保持默认:

  1. @Configuration
  2. public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
  3. @Override
  4. public void init(WebSecurity web) {
  5. web.ignore("/");
  6. }
  7. @Override
  8. protected void configure(HttpSecurity http) throws Exception {
  9. http.antMatcher("/**").authorizeRequests().anyRequest().authenticated();
  10. }
  11. }