安全

单点登录

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

客户端令牌中继

如果您的应用程序是面向用户的 OAuth2 客户端(即已声明 or ),则它具有来自 Spring Boot 的 in 请求范围。您可以 从此上下文中创建自己的 Cookie,并在 autowired 的 ,然后上下文将 始终将访问令牌转发到下游,同时刷新访问权限 令牌。(这些是 Spring 的功能 Security 和 Spring Boot 的 Boot。@EnableOAuth2Sso@EnableOAuth2ClientOAuth2ClientContextOAuth2RestTemplateOAuth2ProtectedResourceDetailsspring-doc.cn

资源服务器令牌中继

如果您的应用程序具有,您可能希望中继 传入令牌下游到其他服务。如果您使用 a 联系下游服务,则这只是一个 如何创建具有正确上下文的模板的问题。@EnableResourceServerRestTemplatespring-doc.cn

如果您的服务用于对传入的 令牌(即它正在使用配置),那么你可以简单地使用自动连接的 authentication 进程)。等效 (在 Spring Boot 1.4 中),您可以注入 a 并获取其 您的配置。例如:UserInfoTokenServicessecurity.oauth2.user-info-uriOAuth2RestTemplateOAuth2ClientContextUserInfoRestTemplateFactoryOAuth2RestTemplatespring-doc.cn

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

然后,此 rest 模板将具有与身份验证筛选器使用的相同(请求范围),因此您可以 使用它来发送具有相同访问令牌的请求。OAuth2ClientContextspring-doc.cn

如果您的应用程序未使用,但仍是客户端 (即它声明 或 ),然后 使用 Spring Security Cloud 用户 从 Will 创建 也向前 令 牌。默认情况下,此功能作为 MVC 处理程序实现 interceptor 中,因此它只能在 Spring MVC 中工作。如果您未使用 MVC 您可以使用自定义过滤器或 AOP 拦截器包装 来提供相同的功能。UserInfoTokenServices@EnableOAuth2Client@EnableOAuth2SsoOAuth2RestOperations@AutowiredOAuth2ContextAccessTokenContextRelayspring-doc.cn

下面是一个基本的 显示使用已创建的自动装配 REST 模板的示例 elsewhere (“foo.com” 是接受与 周围的应用程序):spring-doc.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() + ")";
}

如果您不想转发令牌(这是有效的 选择,因为您可能希望扮演您自己,而不是 客户端)的令牌,则您只需创建自己的令牌,而不是自动装配默认令牌。OAuth2Contextspring-doc.cn

假客户端也会选择一个使用 if it is available 的拦截器,所以他们也应该执行一个 token relay 中继到任何会的地方。OAuth2ClientContextRestTemplatespring-doc.cn