6. 安全

6.1. 单点登录

所有 OAuth2 SSO 和资源服务器功能都移至 Spring Boot 在 1.3 版本中。您可以在 Spring Boot 用户指南中找到文档。

6.1.1. 客户端Tokens中继

如果您的应用是面向 OAuth2 客户端的用户(即已声明@EnableOAuth2Sso@EnableOAuth2Client),则它有一个OAuth2ClientContext在 Spring Boot 的请求范围内。您可以 创建您自己的OAuth2RestTemplate从这个上下文和 自动接线OAuth2ProtectedResourceDetails,然后上下文将 始终将访问Tokens转发到下游,同时刷新访问 Tokens到期时自动。(这些是 Spring 的功能 安全和 Spring Boot。spring-doc.cadn.net.cn

6.1.2. 资源服务器Tokens中继

如果您的应用具有@EnableResourceServer您可能想要中继 传入Tokens下游到其他服务。如果您使用RestTemplate要联系下游服务,那么这只是一个 如何创建具有正确上下文的模板的问题。spring-doc.cadn.net.cn

如果您的服务使用UserInfoTokenServices验证传入 Tokens(即它使用security.oauth2.user-info-uriconfiguration),然后你可以简单地创建一个OAuth2RestTemplate使用自动接线OAuth2ClientContext(它将由 身份验证过程,然后再到达后端代码)。等价 (使用 Spring Boot 1.4),您可以注入UserInfoRestTemplateFactory并抓住它的OAuth2RestTemplate在 您的配置。例如:spring-doc.cadn.net.cn

MyConfiguration.java
@Bean
public OAuth2RestTemplate restTemplate(UserInfoRestTemplateFactory factory) {
    return factory.getUserInfoRestTemplate();
}

然后,此剩余模板将具有相同的OAuth2ClientContext(request-scoped),因此您可以 使用它发送具有相同访问Tokens的请求。spring-doc.cadn.net.cn

如果您的应用未使用UserInfoTokenServices但仍然是客户 (即它声明@EnableOAuth2Client@EnableOAuth2Sso),然后 使用 Spring Security Cloud anyOAuth2RestOperations用户 从@Autowired OAuth2Context也会转发 Tokens。默认情况下,此功能作为 MVC 处理程序实现 拦截器,因此它仅适用于 Spring MVC。如果您没有使用 MVC 您可以使用自定义过滤器或 AOP 拦截器包装AccessTokenContextRelay以提供相同的功能。spring-doc.cadn.net.cn

这是一个基本的 显示使用创建的自动连线 REST 模板的示例 其他地方(“foo.com”是接受与 周围的应用程序):spring-doc.cadn.net.cn

MyController.java
@Autowired
private OAuth2RestOperations restTemplate;

@RequestMapping("/relay")
public String relay() {
    ResponseEntity<String> response =
      restTemplate.getForEntity("https://foo.com/bar", String.class);
    return "Success! (" + response.getBody() + ")";
}

如果您不想转发Tokens(并且是有效的 选择,因为您可能想扮演自己,而不是 客户端),那么你只需要创建自己的OAuth2Context而不是自动连接默认的。spring-doc.cadn.net.cn

假客户端还将选择一个使用OAuth2ClientContext如果可用,那么他们也应该做一个 Tokens中继RestTemplate愿意。spring-doc.cadn.net.cn