keycloak 网守不会阻止任何请求
keycloak gatekeeper doesn't block any request
我正在尝试使用 keycloak + keycloak-gatekeeper 在个人 api 中进行授权:api.mydomain.com
。到目前为止我已经完成了:
- 在keycloak中创建了一个领域
MY-REALM
,keycloak的URL是https://auth.mydomain.com
- 在
Authorization Enabled
ON 和 Valid redirect URIS
的同一领域创建了一个 confidential client
:https://api.mydomain.com/*
- 创建了一个用户
- 在我的服务器中 https://api.mydomain.com 指向 127.0.0.1:5000
- 127.0.0.1:5001 是 "real API"
- 配置了 keycloak-gatekeeper config.yaml:
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。到目前为止一切顺利。
问题出在Authorization部分的配置上:
在 keycloak -> Clients
-> <MY-API-CLIENT-ID>
-> Authorization
-> Resources
我将默认策略编辑为 Deny 每个请求resource
/* 但我可以像以前一样访问 https://api.mydomain.com 中的所有资源 (URL)。
我试过:
- 受领域角色限制(只有管理员可以访问特定资源)。
- 受范围限制。
- 否定策略中的逻辑。
- 受客户角色限制。
- 祈祷。
- 哭泣。
当然,我已经在 keycloak 的 Evaluate
选项卡中尝试了上述所有组合,并且在此处有效地显示了模拟策略显示 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":"/*"}
任何想法将不胜感激。
网守不使用 Keycloak -> Clients -> <MY-API-CLIENT-ID> -> Authorization -> Resources
。
它有自己的资源配置,例如:
resources:
- uri: /admin/*
methods:
- GET
roles:
- openvpn:vpn-user
- openvpn:commons-prod-vpn
文档:https://www.keycloak.org/docs/latest/securing_apps/index.html#configuration-options
我正在尝试使用 keycloak + keycloak-gatekeeper 在个人 api 中进行授权:api.mydomain.com
。到目前为止我已经完成了:
- 在keycloak中创建了一个领域
MY-REALM
,keycloak的URL是https://auth.mydomain.com - 在
Authorization Enabled
ON 和Valid redirect URIS
的同一领域创建了一个confidential client
:https://api.mydomain.com/* - 创建了一个用户
- 在我的服务器中 https://api.mydomain.com 指向 127.0.0.1:5000
- 127.0.0.1:5001 是 "real API"
- 配置了 keycloak-gatekeeper config.yaml:
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。到目前为止一切顺利。
问题出在Authorization部分的配置上:
在 keycloak -> Clients
-> <MY-API-CLIENT-ID>
-> Authorization
-> Resources
我将默认策略编辑为 Deny 每个请求resource
/* 但我可以像以前一样访问 https://api.mydomain.com 中的所有资源 (URL)。
我试过:
- 受领域角色限制(只有管理员可以访问特定资源)。
- 受范围限制。
- 否定策略中的逻辑。
- 受客户角色限制。
- 祈祷。
- 哭泣。
当然,我已经在 keycloak 的 Evaluate
选项卡中尝试了上述所有组合,并且在此处有效地显示了模拟策略显示 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":"/*"}
任何想法将不胜感激。
网守不使用 Keycloak -> Clients -> <MY-API-CLIENT-ID> -> Authorization -> Resources
。
它有自己的资源配置,例如:
resources:
- uri: /admin/*
methods:
- GET
roles:
- openvpn:vpn-user
- openvpn:commons-prod-vpn
文档:https://www.keycloak.org/docs/latest/securing_apps/index.html#configuration-options