Keycloak 用于nginx反向代理的keydape-RBAC

Keycloak 用于nginx反向代理的keydape-RBAC,keycloak,Keycloak,我开始使用Key斗篷,下面是一个我想测试的设置 我想测试这个场景: 这是可行的,但我想在Nginx代理之后实现对应用程序的基于角色的访问,我无法理解jwt令牌的有效负载是如何生成的 以下是我的JWT代币有效负载: "jti": "f5f07b6f-ccae-4f57-a8ea-ae02ebb3cb12", "exp": 1569263630, "nbf": 0, "iat": 1569227630, "iss": "https://keycloak.domain.local

我开始使用Key斗篷,下面是一个我想测试的设置

我想测试这个场景:

这是可行的,但我想在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
          ';
          }
提前谢谢

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

要使JWT具有角色,请遵循以下流程:

  • 在KeyClope管理控制台中创建客户端并支持它 .
  • 将用户添加到keydove
  • 为用户分配角色
  • 将您的客户端配置为具有KeyClope客户端的客户端id
  • 练习浏览器或机器流程,包括将JWT传递给 客户JWT将包含作为声明的角色
您是否将客户端配置为openid客户端?是UI还是机器客户端

要使JWT具有角色,请遵循以下流程:

  • 在KeyClope管理控制台中创建客户端并支持它 .
  • 将用户添加到keydove
  • 为用户分配角色
  • 将您的客户端配置为具有KeyClope客户端的客户端id
  • 练习浏览器或机器流程,包括将JWT传递给 客户JWT将包含作为声明的角色

    • 仍在调试它,但这里有一些您肯定需要的提示。。。。
      您需要在使用

      的同时仍在调试它,但这里有一些您肯定需要的提示。。。。
      您需要在使用

      时保持冷静。好的,完全忘记这个问题,但这里仍然有一个解决方案


      只需使用适当的oidc代理,如gatekeeper(louketo now)或oauth2代理。

      好的,完全忘记这个问题,但这里仍然有一个解决方案

      只需使用适当的oidc代理,如gatekeeper(louketo now)或oauth2代理