服务器令牌文件,资源服务器令牌中继

如果您的应用有@EnableResourceServer,您可能希望将传入令牌下载到其他服务。如果您使用RestTemplate联系下游服务,那么这只是如何使用正确的上下文创建模板的问题。

如果您的服务使用UserInfoTokenServices验证传入令牌(即正在使用security.oauth2.user-info-uri配置)),则可以使用自动连线OAuth2ClientContext创建OAuth2RestTemplate(将由身份验证过程之前它遇到后端代码)。相等(使用Spring Boot 1.4),您可以在配置中注入UserInfoRestTemplateFactory并抓取其中的OAuth2RestTemplate。例如:

MyConfiguration.java

@Bean

public OAuth2RestTemplate restTemplate(UserInfoRestTemplateFactory factory) {

return factory.getUserInfoRestTemplate();

}

然后,此休息模板将具有由身份验证过滤器使用的OAuth2ClientContext(请求作用域)相同,因此您可以使用它来发送具有相同访问令牌的请求。

如果您的应用没有使用UserInfoTokenServices,但仍然是客户端(即声明@EnableOAuth2Client或@EnableOAuth2Sso),则使用Spring安全云任何OAuth2RestOperations,用户从@Autowired@OAuth2Context也会转发令牌。此功能默认实现为MVC处理程序拦截器,因此它仅适用于Spring MVC。如果您不使用MVC,可以使用包含AccessTokenContextRelay的自定义过滤器或AOP拦截器来提供相同的功能。

以下是一个基本示例,显示了使用其他地方创建的自动连线休息模板(“foo.com”是一个资源服务器,接受与周围应用程序相同的令牌):

MyController.java

@Autowired

private OAuth2RestOperations restTemplate;

@RequestMapping("/relay")

public String relay() {

ResponseEntity response =

restTemplate.getForEntity("https://foo.com/bar", String.class);

return "Success! (" + response.getBody() + ")";

}

如果您不想转发令牌(这是一个有效的选择,因为您可能希望以自己的身份而不是向您发送令牌的客户端),那么您只需要创建自己的OAuth2Context的自动装配默认值。

Feign客户端也会选择使用OAuth2ClientContext的拦截器,如果它是可用的,那么他们还应该在RestTemplate将要执行的令牌中继。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值