我创建了多个微服务与springboo1.4。上周,我决定实现oAuth2授权服务。我的计划是,
>
因此,eureka将调用新的授权服务以获取访问令牌。
我发现的问题是,我可以直接从另一个端口(8081)中运行的授权服务器获取JWT访问令牌。当我试图通过zuul网关获取jwt令牌时,不幸的是,我得到了一个空字符串。
请看一下我的网关配置
application.yml(zuul网关)
zuul:
routes:
static:
path: /static/**
uaa:
path: /uaa/**
sensitive-headers:
serviceId: microservice-security-oauth2-server
users:
path: /users/**
serviceId: microservice-core-user
security:
basic:
enabled: false
zuul的应用程序类是
@SpringBootApplication
@EnableZuulProxy
@EnableEurekaClient
@ComponentScan(basePackages={"com.configuration","com.zullfilter"})
public class ZullGatewayServerApplication {
public static void main(String[] args) {
SpringApplication.run(ZullGatewayServerApplication.class, args);
}
}
并且授权服务器配置类为
@Configuration
@EnableAuthorizationServer
public class OAuth2AuthorizationConfiguration extends AuthorizationServerConfigurerAdapter {
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private Environment environment;
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.tokenStore(tokenStore())
.tokenEnhancer(jwtTokenEnhancer())
.authenticationManager(authenticationManager);
}
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
security.tokenKeyAccess("permitAll()")
.checkTokenAccess("isAuthenticated()");
}
@Bean
public TokenStore tokenStore() {
return new JwtTokenStore(jwtTokenEnhancer());
}
@Bean
protected JwtAccessTokenConverter jwtTokenEnhancer() {
String pwd = environment.getProperty("keystore.password");
KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(
new ClassPathResource("jwt.jks"),
pwd.toCharArray());
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setKeyPair(keyStoreKeyFactory.getKeyPair("jwt"));
return converter;
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory()
.withClient("service-account-1")
.secret("service-account-1-secret")
.authorizedGrantTypes("client_credentials")
.scopes("resource-server-read", "resource-server-write")
.accessTokenValiditySeconds(6000);
}
}
我access_token直接请求
curl service-account-1:service-account-1-secret@localhost:8081/uaa/oauth/token -d grant_type=client_credentials
但是当我尝试使用zuul代理时,我得到了一个空字符串
curl service-account-1:service-account-1-secret@localhost:8765/uaa/oauth/token -d grant_type=client_credentials
我使用zuul网关版本1.3和Spring引导1.4
如果有人曾经遇到过这个问题,请告诉我
在我的例子中,解决办法是告诉Zuul不要去掉前缀。我在身份验证服务器上点击了错误的url,得到了401禁止,Zuul接受了错误并返回了200。
zuul:
routes:
auth:
path: /oauth/**
serviceId: saapi-auth-server
stripPrefix: false
sensitiveHeaders: true
我在Zuul客户端上有一个像下面这样的资源服务器配置适配器。我不得不禁用CSRF,但是我们所有的呼叫都是系统对系统的,所以我们应该很好。
@Configuration
@EnableResourceServer
public class JwtSecurityConfig extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/oauth/**").permitAll()
.antMatchers("/api/**").hasAuthority("ROLE_API_ACCESS")
.and()
.csrf().disable();
}
}
我有两个微服务,用户微服务和订单微服务。 因此客户端只需要调用一个endpointhttp://localhost:9090/api/getdetail 我们如何在API网关级别实现这一点?
本文向大家介绍详解Spring Cloud Zuul 服务网关,包括了详解Spring Cloud Zuul 服务网关的使用技巧和注意事项,需要的朋友参考一下 有了Eureka服务注册发现、Hystrix断路器、Ribbon服务调用负载均衡,以及spring cloud config 集群配置中心,似乎一个微服务框架已五脏俱全,last but not least,一个服务网关却不可或缺。 Spr
我试图寻求在微服务架构中使用服务网关的设计实现建议 A、B、C、D、E、F为6个微服务。 他们之间有两种可能的通信场景 虽然,由于这是一个理论上被接受的架构,试图寻求建议我的恐惧! 在情况1和情况2之间,对于一组大约6个微服务,应该优先选择什么?
我有一个相当简单的Spring CloudNetflix设置。我们使用Zuul作为反向代理,Eureka用于服务发现和注册。我们有我们正在慢慢窒息的遗留服务。我们有许多简单的服务,其endpoint配置如下: 因此,现在当每个服务都在eureka注册并随后向Zuul添加路由时,zuul终结点如下所示: 我想阻止Zuul将前缀从eureka服务的路由URI中剥离,以便我的Zuulendpoint如下
我们能在Spring Cloud API网关和没有服务发现的情况下生存吗?
本文向大家介绍浅谈Spring Cloud中的API网关服务Zuul,包括了浅谈Spring Cloud中的API网关服务Zuul的使用技巧和注意事项,需要的朋友参考一下 到目前为止,我们Spring Cloud中的内容已经介绍了很多了,Ribbon、Hystrix、Feign这些知识点大家都耳熟能详了,我们在前文也提到过微服务就是把一个大的项目拆分成很多小的独立模块,然后通过服务治理让这些独立的