在带有auth_request的Nginx中,如何在身份验证后重定向到原始位置?

z9smfwbn  于 2023-01-04  发布在  Nginx
关注(0)|答案(1)|浏览(281)

如何存储和检索原始请求位置(/secure),以便在用户登录时将其返回到该位置?
Nginx auth_request的一切都很好,如果用户通过了身份验证,内部/access_token返回200并继续访问/secure location。
如果用户未通过身份验证,则/access_token location将返回401,并将用户重定向到登录页。

location / {
    include proxy_params.conf;
    proxy_pass http://172.31.25.103:3030;
    
    location /secure {
      auth_request /access_token;
      auth_request_set $auth_status $upstream_status;
      auth_request_set $auth_cookie $upstream_http_set_cookie;
      add_header X-Payload $payload;
      add_header X-Location_se $request;
    }

  }

# ...

location /access_token { #internal
    internal;
    include proxy_params.conf;
    proxy_pass @authserver;
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
    proxy_set_header X-Payload $payload;
    add_header X-Payload_at $payload;
  }  

  error_page 401 = @error401;

  location @error401 {
    add_header X-Success-Redirect $request;
    return 302 '/login/';
  }

用户登录后,我希望它将他们返回到原始/安全位置,因为他们已经登录并获得凭据?

5w9g7ksd

5w9g7ksd1#

要在身份验证后重定向到上一个位置,我们可以使用以下步骤:
1.在Nginx配置中,为auth_request指令设置一个location块,该指令指定由auth_request模块控制的URI。

location = /auth {
  auth_request /auth_backend;
  error_page 401 =200 /login;
}

1.在相同的Nginx配置中,为auth_request指令中指定的URI设置一个位置块,该位置块应该包含处理身份验证过程的指令。

location = /auth_backend {
  internal;
  proxy_pass http://auth_server;
}

1.在login页的位置块中,设置一个表单,用于将登录身份证明提交到auth位置。登录成功后,auth位置将用户重定向到触发auth_request的原始URL。

location = /login {
  proxy_pass http://login_server;
  proxy_set_header X-Original-URI $request_uri;
}

1.在auth_backend位置中,添加一个指令以设置包含原始URL的HTTP标头。登录过程完成后,登录服务器可以使用此标头将用户重定向回原始URL。

location = /auth_backend {
  internal;
  proxy_pass http://auth_server;
  proxy_set_header X-Original-URI $http_x_original_uri;
}

1.在登录服务器上,创建一个脚本,用于处理登录身份证明并将用户重定向回X-Original-URI标头中指定的原始URL。登录成功时,登录表单应调用此脚本。

相关问题