Php 授权请求+;登录屏幕与浏览器重定向
当有人访问某个站点时,我希望他有一个特定的cookie集。 这样的cookie是通过auth_请求进行检查的,403应该会出现在登录屏幕上(需要HTML/PHP,所以不需要auth_basic)。 成功认证后,应重定向至“foo.example.org”。 所以我在代理中编写了一个配置和一些东西来完成所有这些 问题是:浏览器进入foo.example.org,记住以前的重定向,并继续重定向到登录屏幕 我可以更改什么以使浏览器不重定向(从缓存中重定向)? 像“foo.example.org?auth”这样的东西可能是一个东西,或者让auth完全内部化Php 授权请求+;登录屏幕与浏览器重定向,php,nginx,nginx-location,nginx-reverse-proxy,Php,Nginx,Nginx Location,Nginx Reverse Proxy,当有人访问某个站点时,我希望他有一个特定的cookie集。 这样的cookie是通过auth_请求进行检查的,403应该会出现在登录屏幕上(需要HTML/PHP,所以不需要auth_basic)。 成功认证后,应重定向至“foo.example.org”。 所以我在代理中编写了一个配置和一些东西来完成所有这些 问题是:浏览器进入foo.example.org,记住以前的重定向,并继续重定向到登录屏幕 我可以更改什么以使浏览器不重定向(从缓存中重定向)? 像“foo.example.org?aut
server {
server_name foo.example.org;
location / {
auth_request /restricted;
error_page 403 = @error403;
proxy_pass http://10.12.34.56;
resolver 127.0.0.11 ipv6=off;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
location @error403 {
return 307 /restricted;
}
location /restricted {
proxy_pass http://auth_server;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
您返回的是
307临时重定向
响应,而不是403禁止的
,它可能只是缓存在浏览器中,因此会继续重定向。它只是做你让它做的事
不管怎么说,你让自己的生活变得很艰难,其实这样做要容易得多
使用map指令检查cookie并基于其值设置自定义变量。让我们假设他们需要cookiesecret
来获取值password
:
map $cookie_secret $notloggedin {
default 1;
password 0;
}
现在,$notloggedin
将始终设置为1
,除非客户端请求具有cookiesecret=password
,否则它将被设置为0
,这在Nginx中也等同于空/未设置
现在我们将该变量放入location块中的if条件中。在不同地点使用if条件存在一些混乱,很多人会告诉你不应该使用它们,但明确指出:
如果在某个位置,唯一可以在室内完成的100%安全的事情
背景是:
返回。。。;
重写最后
这样就可以了
location / {
if ($notloggedin) {
return https://example.com/login;
}
没有cookie的用户现在将被重定向到登录页面。感谢您的写作。以这种方式打开基本身份验证是否正常?还是我做错了什么?我认为未经授权的客户端会看到自定义登录屏幕。但现在我看到了基本的auth登录,然后是自定义登录屏幕。我实际上意识到我也在让它变得比需要的更难。我已经编辑了我的答案