spring-boot - 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 的主机文件,
- 以管理员身份打开 c:\Windows\System32\Drivers\etc\hosts 文件
- 添加 127.0.0.1 密钥斗篷
然后从邮递员那里,我们可以访问 keycloak 端点,
- http://keycloak:8080/auth……
解决方案
推荐阅读
- xamarin - Xamarinn 的新手可以拖放 UI 吗?
- javascript - JSON 中的最大值
- javascript - 当有人点击我页面上的任何链接时打开两个标签
- c++ - 类似于 `declval` 的概念
- ansible - Hashicorp Vault 通过 Ansible 解封错误
- php - 在 PHP 中使用准备好的语句将数据插入数据库失败,没有报告错误
- ios - 动态更新 UITableView 高度和数据
- python - 使用三元组损失预测图像
- python - AttributeError:模块“熊猫”没有属性“ewma”
- gps - 运行 .adb 程序时“无法为文件 random.ads 生成代码”