我正在尝试在个人 api: 中使用 keycloak + keycloak-gatekeeper 进行授权api.mydomain.com
。到目前为止,我已经完成了:
- 在 keycloak 中创建了一个领域
MY-REALM
,keycloak 的 URL 是https://auth.mydomain.com confidential client
在同一领域中创建了一个Authorization Enabled
ON和Valid redirect URIS
:https://api.mydomain.com/ *- 创建了一个用户
- 在我的服务器内部https://api.mydomain.com指向 127.0.0.1:5000
- 127.0.0.1:5001 是“真正的 API”
- 使用此 config.yaml 配置 keycloak-gatekeeper:
client-id: <MY-API-CLIENT-ID>
client-secret: <SECRET>
discovery-url: https://auth.mydomain.com/auth/realms/<MY-REALM>
enable-default-deny: true
listen: 127.0.0.1:5000
upstream-url: http://127.0.0.1:5001
verbose: true
enable-logging: true
enable-security-filter: true
enable-json-logging: true
现在,如果我在浏览器https://api.mydomain.com中访问,我将被重定向到https://auth.mydomain.com,要求输入用户名和密码。我提供在第 3 点创建的用户,并按预期再次重定向到https://api.mydomain.com。到目前为止,一切都很好。
问题在于授权部分的配置:在 keycloak -> Clients
-> <MY-API-CLIENT-ID>
-> Authorization
->Resources
我编辑默认策略以拒绝resource
/*中的每个请求,但我可以访问https://api 中的每个资源(URL)。 mydomain.com和以前一样。
我努力了:
- 按领域角色限制(只有管理员可以访问特定资源)。
- 受范围限制。
- 否定策略中的逻辑。
- 受客户角色限制。
- 祈祷。
- 哭。
当然,我已经Evaluate
在 keycloak 的 Tab 中尝试了上述所有组合,并且在此处有效地模拟了策略显示DENY。
那么我做错了什么?顺便说一句,在每次请求之后,这是来自 keycloak-gatekeeper 的日志:
{"level":"debug","ts":1554936731.4022436,"caller":"keycloak-gatekeeper/middleware.go:337","msg":"access permitted to resource","access":"permitted","email":"testmail@mail.com","expires":201.59779997,"resource":"/*"}
任何想法将不胜感激。