当我使用浏览器发出HTTP请求以从我的Apache服务器获取index.html文件时,如果请求标头中不存在特定标记,则会有一个代理重定向我的流量以进行登录。因此,初始请求将不会在标头中具有令牌并且代理将强制重定向到登录是有意义的,在登录之后我将被呈现index.html文件以及响应头中的相关令牌。 / p>
所以我的问题如下: 如果登录后的服务器使用index.html文件响应响应头中的特定令牌,如何让浏览器自动在所有后续http请求上附加令牌?
在我从服务器返回index.html文件后,浏览器将请求所有需要加载应用程序的字体和库,如index.html文件中所引用的那样,但这些请求不会在请求标头中包含令牌,这反过来导致浏览器再次被重定向以进行登录。这样一个粘性环......
我正在考虑让代理使用“Set-Cookie”在标头中返回令牌,但Chrome不会在所有后续请求中自动添加该Cookie。邮差似乎添加标题,但不是Chrome。我正在设置的cookie必须使用HttpOnly和Secure标记。所以我无法从JavaScript访问它。
如果还有其他问题,请告诉我。 提前谢谢。
亲切的问候 弗朗索瓦
答案 0 :(得分:0)
我找到了问题的答案。
这是我测试的方式。我创建了一个运行Apache的docker容器,它托管了一个index.html,auth.html和login.html文件。然后我使用mod_rewrite使用以下httpd.conf设置来帮助设置cookie和测试cookie。
RewriteCond %{HTTP_COOKIE} !^.*X-TOKEN.*$
RewriteCond %{REQUEST_URI} (.*)login.html
RewriteRule (.*) "/login.html"
RewriteCond %{HTTP_COOKIE} !^.*X-TOKEN.*$
RewriteCond %{REQUEST_URI} !(.*)login.html
RewriteRule (.*) "/auth.html"
RewriteCond %{REQUEST_URI} (.*)login.html
RewriteRule .* - [E=STATUS:1]
Header set Set-Cookie X-SBG-TOKEN=ThisIsMyToken;HttpOnly;Secure env=STATUS
请原谅可怕的条件:)
但我发现,根据要求,我不应该检查标题中的X-TOKEN
,但我应该在请求cookie中检查它(我仍然不清楚,这是cookie随请求一起发送?Apache服务器如何知道这个cookie?)。通过这种方式,我能够检查浏览器是否确实已经过身份验证。
感谢所有回复和帮助的人!
亲切的问候 弗朗索瓦