Nginx反向代理的Keycloak RBAC

时间:2019-09-23 13:26:53

标签: keycloak

我开始使用keycloak,这是我要测试的设置。

我要测试这种情况: scheme

它可以工作,但是我想对Nginx代理后面的应用程序实现基于角色的访问,并且我不明白jwt令牌的有效负载是如何生成的。

这是我的JWT令牌有效载荷:

  "jti": "f5f07b6f-ccae-4f57-a8ea-ae02ebb3cb12",
  "exp": 1569263630,
  "nbf": 0,
  "iat": 1569227630,
  "iss": "https://keycloak.domain.local/auth/realms/LDAP_test",
  "sub": "fedc6baf-4ba4-4fa6-924c-9501edf070f7",
  "typ": "Serialized-ID",
  "auth_time": 0,
  "session_state": "aa0052ee-b5e1-45cc-bee4-e7bccdfa4a59",
  "state_checker": "sC_nvlDXfjUDHhC15ZDpPauX5JkxhvVtYUOn62PhtV8"

我希望我的令牌包含角色,用户名和电子邮件,并且我不知道如何将其放置在那里。客户是否以某种方式与令牌或密钥斗篷的内容相关,总是将其拥有的所有东西都投入其中?

这是我的Nginx客户端设置:

server {
    server_name demo-a.domain.local;
    location / {
      proxy_pass http://10.10.10.168/index.html;
           access_by_lua '
             local opts = {
               redirect_uri_path = "/redirect_uri",
               accept_none_alg = true,
               discovery = "https:/keycloak.domain.local/auth/realms/LDAP_test/.well-known/openid-configuration",
               client_id = "nginx-gateway",
               client_secret = "19fe43bc-4167-4433-816a-eb96da33f9a3",
               redirect_uri_scheme = "https",
               logout_path = "/logout",
               redirect_after_logout_uri = "https://keycloak.domain.local/auth/realms/LDAP_test/protocol/openid-connect/logout?redirect_uri=https://www.nginx-gateway.domain.local/",
               redirect_after_logout_with_id_token_hint = false,
               session_contents = {id_token=true}
             }
             -- call introspect for OAuth 2.0 Bearer Access Token validation
             local res, err = require("resty.openidc").authenticate(opts)
             if err then
               ngx.status = 403
               ngx.say(err)
               ngx.exit(ngx.HTTP_FORBIDDEN)
             end
          ';
          }

谢谢!

3 个答案:

答案 0 :(得分:0)

您是否将client配置为openid客户端?是UI还是机器客户端?

要使您的JWT扮演角色,请按照以下流程进行以下操作:

  • 在Keycloak管理控制台中创建客户端,并configure进行支持 open-id-connect
  • 将用户添加到Keycloak。
  • 将角色分配给用户。
  • 配置您的客户端,使其具有Keycloak客户端的客户端ID。
  • 涉及JWT传递给 客户。 JWT将包含这些角色。

答案 1 :(得分:0)

仍然在调试它,但是这里肯定有一些指针……。 使用Authenticating Reverse Proxy with KeyCloak

时需要keycloak behind an nginx proxy

答案 2 :(得分:0)

好吧,完全忘记了这个问题,但是这里仍然是一个解决方案。

只需使用适当的oidc代理,例如网守(现在是Louketo)或oauth2-proxy。