首页 > 解决方案 > Keycloak 总是返回 401 - 用于微服务的 Zuul api 网关

问题描述

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

网关服务客户端是机密的,API 服务客户端是公开的,在 keycloak 中。

包括 keycloak 在内的所有服务都作为 docker 容器运行。 下面是属性文件中的 keycloak-spring boot 配置。

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/) 与微服务属性文件中的 keycloak 配置 URL (http://keycloak:8080/auth) 不匹配.

当我从 docker 网络外部测试微服务时会发生这种情况。(来自邮递员)。添加主机名'keycloak;后可以解决它 到 Windows 的主机文件,

然后从邮递员那里,我们可以访问 keycloak 端点,

标签: spring-bootdockermicroserviceskeycloaknetflix-zuul

解决方案


推荐阅读