Опитвам се да настроя keycloak-gatekeeper като обратен прокси пред докер контейнер, за да осигуря удостоверяване и оторизация срещу контейнера. Използвам FusionAuth като съвместим с OIDC доставчик на самоличност и успях да накарам keycloak-getekeeper да използва това, използвайки потока за оторизация. Проблемът идва, когато се опитвам да огранича кои потребители имат достъп до ресурс въз основа на тяхната роля или членство в група.
В момента всички искания са отхвърлени. Когато погледна в регистрационните файлове на сървъра, мога да видя следните съобщения:
1.5548202388823931e+09 info keycloak-gatekeeper/middleware.go:90 client request {"latency": 0.039427852, "status": 403, "bytes": 0, "client_ip": "127.0.0.1:40866", "method": "GET", "path": "/"}
1.5548202614442139e+09 error keycloak-gatekeeper/middleware.go:108 no session found in request, redirecting for authorization {"error": "authentication session not found"}
1.5548202614443152e+09 info keycloak-gatekeeper/middleware.go:90 client request {"latency": 0.000108426, "status": 307, "bytes": 95, "client_ip": "127.0.0.1:40866", "method": "GET", "path": "/"}
1.5548202614823494e+09 debug keycloak-gatekeeper/handlers.go:88 incoming authorization request from client address {"access_type": "", "auth_url": "https://identity.***********.io/oauth2/authorize?client_id=********&redirect_uri=https%3A%2F%2F********.io%2Foauth%2Fcallback&response_type=code&scope=openid+email+profile&state=********", "client_ip": "127.0.0.1:40866"}
1.554820261482426e+09 info keycloak-gatekeeper/middleware.go:90 client request {"latency": 0.000132558, "status": 307, "bytes": 298, "client_ip": "127.0.0.1:40866", "method": "GET", "path": "/oauth/authorize"}
1.5548203051960323e+09 info keycloak-gatekeeper/handlers.go:167 issuing access token for user {"email": "[email protected]", "expires": "2019-04-09T15:31:45Z", "duration": "59m59.803970144s"}
1.5548203051961453e+09 info keycloak-gatekeeper/middleware.go:90 client request {"latency": 0.099124835, "status": 307, "bytes": 37, "client_ip": "127.0.0.1:40866", "method": "GET", "path": "/oauth/callback"}
1.5548203052413428e+09 debug keycloak-gatekeeper/session.go:51 found the user identity {"id": "5f165d68-9350-47e6-9152-d76260cabd7c", "name": "[email protected]", "email": "[email protected]", "roles": "", "groups": ""}
1.5548203052417035e+09 warn keycloak-gatekeeper/middleware.go:307 access denied, invalid roles {"access": "denied", "email": "[email protected]", "resource": "/*", "roles": "role-1,role-3"}
1.5548203052417736e+09 info keycloak-gatekeeper/middleware.go:90 client request {"latency": 0.000509757, "status": 403, "bytes": 0, "client_ip": "127.0.0.1:40866", "method": "GET", "path": "/"}
Доколкото виждам, причината за моите откази е, че ролите не са попълнени. Също така стартирах клиент, за да получа JWT (чрез имплицитния поток) за потребителя, който се връща, изглеждайки нещо подобно:
{
"aud": "************************",
"exp": 1554822076,
"iat": 1554818476,
"iss": "https://identity.*******.io",
"sub": "****************",
"authenticationType": "PASSWORD",
"email": "[email protected]",
"email_verified": true,
"applicationId": "*****************",
"roles": [
"role-1",
"role-3"
]
}
От това виждам, че потребителят е в правилните роли.
В момента съм малко на загуба относно това къде се крие проблемът или как да отстранявам грешки в екземпляра keycloak-gatekeeper по-подробно
keycloak-gatekeeper
, но тъй като претенциятаroles
не е добре известна OIDC претенция, те вероятно няма да бъдат картографирани автоматично. В Keycloak това се прави с помощта на картограф в конфигурацията на клиента. Мисля, че ще трябва да кажете наkeycloak-gatekeeper
коя претенция съдържа ролите, в този случай това ще бъдеroles
. - person robotdan   schedule 09.04.2019