Spring boot KeyClope始终返回401-Zuul api网关用于微服务

Spring boot KeyClope始终返回401-Zuul api网关用于微服务,spring-boot,docker,microservices,keycloak,netflix-zuul,Spring Boot,Docker,Microservices,Keycloak,Netflix Zuul,我得到了一个运行在API网关(Zuul)后面的微服务,该网关使用KeyClope保护端点。当从公共客户端(例如:邮递员)访问安全端点时,即使使用有效令牌,keydepate也始终返回401。 我在没有使用API网关的情况下完成了相同的场景,并且工作得非常好,将问题隔离到新添加的API网关上(已在Key斗篷中配置了客户端、角色和用户) 网关服务客户端是机密的,并且 API服务客户机是公共的,在KeyClope中 所有服务,包括keydepeat,都作为docker容器运行。 下面是属性文件中的Ke

我得到了一个运行在API网关(Zuul)后面的微服务,该网关使用KeyClope保护端点。当从公共客户端(例如:邮递员)访问安全端点时,即使使用有效令牌,keydepate也始终返回401。 我在没有使用API网关的情况下完成了相同的场景,并且工作得非常好,将问题隔离到新添加的API网关上(已在Key斗篷中配置了客户端、角色和用户)

网关服务客户端是机密的,并且 API服务客户机是公共的,在KeyClope中

所有服务,包括keydepeat,都作为docker容器运行。 下面是属性文件中的KeyClope spring引导配置

keycloak :
  realm : admin-realm
  auth-server-url : http://keycloak:8080/auth
  ssl-required : external
  resource : gateway-service
  bearer-only : true
  credentials.secret : *********************
#  
  security-constraints[0] : 
    authRoles[0] : user
    securityCollections[0] : 
      patterns[0] : /api/*
已解决

问题在于令牌的颁发者URL之间不匹配(http://localhost:8080/auth/)以及micro服务属性文件中的KeyClope配置URL(http://keycloak:8080/auth)

这发生在我从docker网络外部测试微服务时。(来自邮递员)。在我添加主机名的keydepeat之后,它就可以解决了;到Windows的主机文件

  • 以管理员身份打开c:\Windows\System32\Drivers\etc\hosts文件
  • 添加127.0.0.1密钥斗篷
然后从邮递员那里我们可以通过

  • http://keycloak:8080/auth......

完全错误是什么?您确定Zuul转发授权头吗?尝试实现或找到合适的筛选器。@masseyb我得到的错误是典型的401未经授权的响应<代码>代码{“时间戳”:“2020-07-10T15:19:26.073+00:00”,“状态”:401,“错误”:“未经授权”,“消息”:““路径”:“/api/v1/admin”}@solveMe我将对此进行调查。。还有其他提示吗?@solveMe-Hi,KeyClope适配器集成到zuul api网关。