W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
如果您的應(yīng)用具有@EnableResourceServer
,則您可能希望將傳入令牌下游中繼到其他服務(wù)。如果您使用RestTemplate
與下游服務(wù)聯(lián)系,那么這只是如何在正確的上下文中創(chuàng)建模板的問題。
如果您的服務(wù)使用UserInfoTokenServices
對傳入令牌進(jìn)行身份驗證(即它使用的是security.oauth2.user-info-uri
配置),那么您可以使用自動連接的OAuth2ClientContext
簡單地創(chuàng)建一個OAuth2RestTemplate
(它將由身份驗證填充)在到達(dá)后端代碼之前進(jìn)行處理)。等效地(對于Spring Boot 1.4),您可以注入UserInfoRestTemplateFactory
,并在您的配置中獲取其OAuth2RestTemplate
。例如:
MyConfiguration.java。
@Bean public OAuth2RestTemplate restTemplate(UserInfoRestTemplateFactory factory) { return factory.getUserInfoRestTemplate(); }
然后,該其余模板將具有與身份驗證過濾器使用的相同的OAuth2ClientContext
(請求范圍),因此您可以使用它來發(fā)送具有相同訪問令牌的請求。
如果您的應(yīng)用未使用UserInfoTokenServices
,但仍是客戶端(即它聲明了@EnableOAuth2Client
或@EnableOAuth2Sso
),則使用Spring Security覆蓋用戶從{12創(chuàng)建的任何OAuth2RestOperations
/} OAuth2Context
也將轉(zhuǎn)發(fā)令牌。默認(rèn)情況下,此功能作為MVC處理程序攔截器實現(xiàn),因此僅在Spring MVC中有效。如果您不使用MVC,則可以使用包裝AccessTokenContextRelay
的自定義過濾器或AOP攔截器來提供相同的功能。
這是一個基本示例,展示了如何使用在其他位置創(chuàng)建的自動連接的休息模板(“ foo.com”是接受與周圍應(yīng)用程序相同的令牌的資源服務(wù)器):
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() + ")"; }
如果您不希望轉(zhuǎn)發(fā)令牌(這是一個有效的選擇,因為您可能想扮演自己的角色,而不是發(fā)送令牌的客戶端),那么您只需要創(chuàng)建自己的OAuth2Context
自動裝配默認(rèn)值。
Feign客戶端還將選擇使用OAuth2ClientContext
的攔截器(如果可用),因此它們還應(yīng)在RestTemplate
可以使用的任何地方進(jìn)行令牌中繼。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: