使用Spring-Security和auth_request模块的Nginx身份验证

时间:2019-07-11 17:43:41

标签: nginx spring-security-oauth2 okta

我目前有一个使用oauth2和okta作为提供程序的使用spring-security的应用程序。这非常适合对该应用程序进行身份验证。我现在尝试设置nginx来提供内容,但前提是您已通过Java应用程序进行了身份验证。

我本质上是在遵循本指南

https://redbyte.eu/en/blog/using-the-nginx-auth-request-module/

    location = /auth {
      internal;
      proxy_set_header Host $host;
      proxy_pass_request_body off;
      proxy_set_header Content-Length "";

      proxy_pass https://host.com/app/auth_check;
    }

    location @noauth {
      return 302 https://corp.okta.com/oauth2/default/v1/authorize?response_type=code&client_id=XXX&scope=openid%20profile%20email&state=XXX%3D&redirect_uri=https://host.com/app/login/oauth2/code/OKTA;
    }

    location / {
            auth_request /auth;
            error_page 401 = @noauth;
            auth_request_set $user $upstream_http_x_forwarded_user;
            proxy_set_header X-Forwarded-User $user;
            proxy_pass https://some-resource.com:8080;
    }

这是代码流:

  • 击中nginx
  • auth_check是401以启动身份验证流程
  • 从okta获取代码
  • 使用代码检查Java应用程序
  • 错误authorization_request_not_found

据我所读,这是因为nginx在应用程序中没有有效的JSESSIONID,因此即使我有来自okta的有效代码,也无法进行身份验证。

针对此问题是否有更好的体系结构?或可以使这项工作有效的nginx配置

0 个答案:

没有答案