Keycloak-Nginx问题-即使认为提供了有效的承载令牌,NGINX仍然会进入浏览器流程

问题描述

我有一个backend_svc和一个/test GET端点,该端点返回一些数据。

我想确保这项服务。我想将NGINX用作api网关,并在NGINX级别上设置API身份验证。 我正在使用运行在keycloak_ip:9999

上的Keycloak

基于登录的浏览器流程工作正常,即在通过NGINX提供用户名和密码后,我能够访问backend_svc

我想使用backend_svc访问此access_token。 我可以通过使用密钥斗篷access_token端点来生成/token

但是当我从邮递员访问backend_svc时,即使我提供了access_token,它仍然重定向到登录流程,请参考所附的邮递员屏幕截图。

如果我使用Zuul API网关而不是NGINX,则在access_token的情况下可以正常工作

很明显,NGINX即使有效,也不会验证access_token

Screenshot of the postman

NGINX conf-

  server {
    listen 80;

    location /health {
      default_type text/plain;
      return 200 "the NGINX server is working in local docker!";
    }

    access_by_lua '
         local opts = {
           redirect_uri_path = "/redirect_uri",accept_none_alg = true,discovery = "http://keycloak_ip:9999/auth/realms/sahaj/.well-known/openid-configuration",client_id = "sahaj",client_secret = "e51910a7-73f5-457c-838c-e71db47e3ba5",redirect_uri_scheme = "http",logout_path = "/logout",redirect_after_logout_uri = "http://keycloak_ip:9999/auth/realms/sahaj/protocol/openid-connect/logout?redirect_uri=http://backend_svc:8888",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
        
        ';

    location /backend-api {
            rewrite ^/backend-api(.*) $1 break;
            proxy_pass http://backend_svc:8888;
    }

  }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...