小编mig*_*gar的帖子

如何使用Spring Cloud Security实现OAuth2"令牌交换"

我想知道是否有人举例说明如何使用Spring Cloud Security(使用OAuth2)实现"令牌交换"技术.

目前,我已经在微服务环境中使用ZuulProxy实现了"令牌中继"技术,以"中继"OAuth2令牌并实现SSO.这很好,但暗示每个微服务使用相同的clientId(在ZuulProxy设置中指定为ZuulProxy仅使用authorization_code grant类型和clientId提供的中继).但是,对于微服务内部调用,我想"交换"令牌.这意味着在某些情况下,ZuulProxy中继的令牌不是我需要用来验证/授权微服务A作为微服务B的客户端的令牌.

Spring Cloud参考文档目前说:"基于Spring Boot和Spring Security OAuth2,我们可以快速创建实现常见模式的系统,如单点登录,令牌中继和令牌交换." (http://cloud.spring.io/spring-cloud-security/spring-cloud-security.html)

我想在参考文档中使用"Token Exchange"它们意味着OAuth2的这个扩展的实现,在本规范中解释,这基本上是我需要的:https: //tools.ietf.org/html/draft-ietf- OAuth的令牌交换-03

正如我所说,我了解如何使用SSO和令牌中继,但我无法在参考文档中看到有关如何实现"令牌交换"的进一步说明.我也无法找到实现示例.

有谁知道在哪里可以找到更多信息或示例?

非常感谢!

spring spring-boot spring-cloud spring-oauth2

13
推荐指数
1
解决办法
3210
查看次数

春季@FeignClient与OAuth2FeignRequestInterceptor不起作用

我正在尝试使用OAuth2设置FeignClient来实现“中继令牌”。我只希望FeignClient中继/传播来自ZuulProxy(已启用SSO)的OAuth2令牌。我使用Spring 1.3.1-RELEASESpring Cloud Brixton.M4

我在自定义@FeignClient配置中添加了一个拦截器:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.security.oauth2.client.feign.OAuth2FeignRequestInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.client.OAuth2ClientContext;
import org.springframework.security.oauth2.client.resource.OAuth2ProtectedResourceDetails;
import org.springframework.security.oauth2.client.token.grant.code.AuthorizationCodeResourceDetails;

import feign.RequestInterceptor;

@Configuration
public class FeignClientConfiguration {

@Value("${security.oauth2.client.userAuthorizationUri}")
private String authorizeUrl;

@Value("${security.oauth2.client.accessTokenUri}")
private String tokenUrl;

@Value("${security.oauth2.client.client-id}")
private String clientId;


// See https://github.com/spring-cloud/spring-cloud-netflix/issues/675
@Bean
public RequestInterceptor oauth2FeignRequestInterceptor(OAuth2ClientContext oauth2ClientContext){
    return new OAuth2FeignRequestInterceptor(oauth2ClientContext, resource());
}

@Bean
protected OAuth2ProtectedResourceDetails resource() {
    AuthorizationCodeResourceDetails resource = new AuthorizationCodeResourceDetails();
    resource.setAccessTokenUri(tokenUrl);
    resource.setUserAuthorizationUri(authorizeUrl);
    resource.setClientId(clientId);
    // TODO: Remove this harcode 
    resource.setClientSecret("secret");
    return resource;
}   
}
Run Code Online (Sandbox Code Playgroud)

然后像这样将配置添加到我的@FeignClient中:

@FeignClient(name …
Run Code Online (Sandbox Code Playgroud)

spring spring-boot spring-security-oauth2 spring-cloud

4
推荐指数
1
解决办法
9043
查看次数