为啥带有 Netflix Zuul 反向代理的 Keycloak OAUTH2 不传递令牌

Posted

技术标签:

【中文标题】为啥带有 Netflix Zuul 反向代理的 Keycloak OAUTH2 不传递令牌【英文标题】:Why Keycloak OAUTH2 with Netflix Zuul Reverse Proxy don't pass Token为什么带有 Netflix Zuul 反向代理的 Keycloak OAUTH2 不传递令牌 【发布时间】:2017-05-18 01:56:57 【问题描述】:

我正在使用 Keycloak 2.5.0.CR1 进行身份和访问管理,以使用 OAUTH2 和 JWT 保护 Spring Cload 微服务。这可以很好地与角度前端和弹簧安全性结合使用 keycloak-spring-security-adapter。

问题在于与 Netflix Zuul Reverse Proxy 结合使用:

我想在一个单独的服务中使用 Netflix Zuul 反向代理,只将请求从前端发送到这个 apigateway,然后这个请求将请求发送到后端的相应微服务。每个微服务都使用令牌进行授权,并在他的微服务上使用 keycloak 处理安全性。

以下我已经尝试过:

apigateway 微服务:

@EnableEurekaClient
@EnableZuulProxy 
@EnableOauth2Sso

@SpringBootApplication
public class ApigatewayApplication 

   public static void main(String[] args) 
      SpringApplication.run(ApigatewayApplication.class, args);
 

application.properties:

security.oauth2.client.access-token-uri:http://localhost:8080/auth/realms/myrealm/protocol/openid-connect/token
security.oauth2.client.userAuthorizationUri:http://localhost:8080/auth/realms/myrealm/protocol/openid-connect/auth 
security.oauth2.client.clientId:tutorial-frontend
security.oauth2.client.clientSecret:
security.oauth2.resource.user-info-uri=http://authrealms/myrealm/protocol/openid-connect/userinfo

zuul.sensitive-headers=Cookie,Set-Cookie 

安全微服务之一:

@EnableResourceServer
@EnableDiscoveryClient
@SpringBootApplication
public class BusinessApplication 

   public static void main(String[] args) 
      SpringApplication.run(BusinessApplication.class, args);
   
 

似乎 Netflix Zuul 没有将令牌发送到后端 mircoservice 并尝试一直调用 http://localhost:8080/login。

响应为 500,带有“无效参数:redirect_uri”

我错过了什么吗?

我已经搜索了整个互联网,但找不到解决方案。希望得到帮助。

【问题讨论】:

【参考方案1】:

“无效参数:redirect_uri”

提示您的客户端在 Keycloak 中配置不正确

【讨论】:

以上是关于为啥带有 Netflix Zuul 反向代理的 Keycloak OAUTH2 不传递令牌的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 微服务 com.netflix.zuul.exception.ZuulException:转发错误

从数据库加载 netflix zuul 路由值

Heroku 负载均衡器与 Netflix zuul

SpringCloud - Spring Cloud Netflix 之 Zuul网关;过滤器filter

Netflix Zuul 在一个端口上,Hystrix Dashboard 在另一个端口上

Zuul Ribbon 异常总是返回 500 响应