2014-04-28 69 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