![](/img/trans.png)
[英]How can I customize spring boot embedded tomcat thread pool?
[英]How do I customize the Spring Boot AccessTokenProvider?
我想增強 OAuth2 提供程序的令牌請求。 我需要向 POST 請求添加一個額外的參數。 我不明白在何處掛鈎 Spring Boot 框架來完成此操作。
Spring Boot 框架提供了一個用於自定義 OAuth2RestTemplate 的鈎子,如“ 自定義用戶信息 RestTemplate ”中所述。 我已經實現了以下定制器,它按預期被實例化和調用。 不幸的是,在發出令牌請求時,我的提供者似乎沒有被調用。
public class AadUserInfoRestTemplateCustomizer implements UserInfoRestTemplateCustomizer {
@Override
public void customize(OAuth2RestTemplate oAuth2RestTemplate) {
oAuth2RestTemplate.setAuthenticator(new AadOauth2RequestAuthenticator());
// Attempt 1: Use my own token provider, but it never gets called...
oAuth2RestTemplate.setAccessTokenProvider(new AadAccessTokenProvider());
// Even better, if only OAuth2RestTemplate provided a getter for AccessTokenProvider, I could add interceptors and or enhancers
// Can't do this :( AuthorizationCodeAccessTokenProvider provider = oAuth2RestTemplate.getAccessTokenProvider();
}
}
題:
如何設置自定義 AccessTokeProvder,或者甚至更好,獲取對默認值的引用並使用攔截器或增強器掛鈎請求?
代碼示例
在下面的 fork 中,請查看 /simple 模塊。 將您的 AAD 租戶信息添加到 /simple/src/main/resources/application.yml 文件中:
https://github.com/bmillerbma/tut-spring-boot-oauth2/tree/aad
筆記:
作為一種解決方法,我將資源添加到我的配置文件中,並添加了以下兩個類來捕獲 OAuth2RestTemplate 並添加請求增強器。
應用程序.yaml:
aad:
resource: https://graph.windows.net
security:
oauth2:
client:
clientId: [clientid]
etc.
@Component
public class AzureRequestEnhancerCustomizer {
@Autowired
private OAuth2RestTemplate userInfoRestTemplate;
@Autowired
private AzureRequestEnhancer azureRequestEnhancer;
@PostConstruct
public void testWiring() {
AuthorizationCodeAccessTokenProvider authorizationCodeAccessTokenProvider = new AuthorizationCodeAccessTokenProvider();
authorizationCodeAccessTokenProvider.setTokenRequestEnhancer(azureRequestEnhancer);
userInfoRestTemplate.setAccessTokenProvider(authorizationCodeAccessTokenProvider);
}
}
@Component
public class AzureRequestEnhancer implements RequestEnhancer {
@Value("${aad.resource:null}")
private String aadResource;
@Override
public void enhance(AccessTokenRequest request, OAuth2ProtectedResourceDetails resource, MultiValueMap<String, String> form, HttpHeaders headers) {
if (!StringUtils.isEmpty(resource)) {
form.set("resource", aadResource);
}
}
}
我遇到了同樣的問題並使用了這個解決方法,但因此我堅持使用 spring boot 1.3.8
所以我開始深入挖掘,然后我終於找到了一個更簡單的方法。 只需在userAuthorizationUri
之后添加一個資源參數。
security:
oauth2:
client:
...
userAuthorizationUri: https://login.microsoftonline.com/<<tenantId>>/oauth2/authorize?resource=https://graph.windows.net
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.