我想要調用一個使用Oauth 1a的API,使用spring-security-oauth的OAuthRestTemplate
。如何在OAuthRestTemplate,spring-security-oauth上手動設置訪問令牌?
我看到大多數例子設置了消費者密鑰和祕密,然後讓圖書館獲得訪問令牌。 我有令牌和令牌機密(不過期),我想在OAuthRestTemplate上設置它們並進行調用,而不需要通過認證流程。
這可能嗎?如果是這樣,怎麼樣?
我想要調用一個使用Oauth 1a的API,使用spring-security-oauth的OAuthRestTemplate
。如何在OAuthRestTemplate,spring-security-oauth上手動設置訪問令牌?
我看到大多數例子設置了消費者密鑰和祕密,然後讓圖書館獲得訪問令牌。 我有令牌和令牌機密(不過期),我想在OAuthRestTemplate上設置它們並進行調用,而不需要通過認證流程。
這可能嗎?如果是這樣,怎麼樣?
AFAIK這是不可能的(它在OAuth2端,但OAuth1從來沒有得到太多的愛)。感激地接受了貢獻。
這是可能的,雖然有點hacky。下面的示例代碼:
// Assume you have a preconfigured RestTemplate
OAuthRestTemplate template = new OAuthRestTemplate(resource);
OAuthConsumerToken accessToken = new OAuthConsumerToken();
accessToken.setAccessToken(true);
accessToken.setResourceId(template.getResource().getId());
accessToken.setValue(ACCESS_TOKEN);
OAuthSecurityContextImpl securityContext = new OAuthSecurityContextImpl();
securityContext.setAccessTokens(new HashMap<>());
securityContext.getAccessTokens().put(accessToken.getResourceId(), accessToken);
OAuthSecurityContextHolder.setContext(securityContext);
理想情況下,你應該檢查現有的安全上下文是否存在,以及令牌添加到地圖中,如果它不存在。
@DaveSyer - 我有權假定OAuthSecurityContextHolder行爲類似於SecurityContextHolder,因爲任何機制都可以自由寫入此行爲。 – heretik