我想要调用一个使用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