2014-04-28 103 views
3

我想要調用一個使用Oauth 1a的API,使用spring-security-oauth的OAuthRestTemplate如何在OAuthRestTemplate,spring-security-oauth上手動設置訪問令牌?

我看到大多數例子設置了消費者密鑰和祕密,然後讓圖書館獲得訪問令牌。 我有令牌和令牌機密(不過期),我想在OAuthRestTemplate上設置它們並進行調用,而不需要通過認證流程。

這可能嗎?如果是這樣,怎麼樣?

回答

1

AFAIK這是不可能的(它在OAuth2端,但OAuth1從來沒有得到太多的愛)。感激地接受了貢獻。

0

這是可能的,雖然有點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); 

理想情況下,你應該檢查現有的安全上下文是否存在,以及令牌添加到地圖中,如果它不存在。

+0

@DaveSyer - 我有權假定OAuthSecurityContextHolder行爲類似於SecurityContextHolder,因爲任何機制都可以自由寫入此行爲。 – heretik