2017-10-05 155 views
-1

当我使用浏览器从Apache服务器获取index.html文件时,如果请求中不存在特定的令牌,则会有一个代理重定向我的流量以进行登录头。所以这是有道理的,最初的请求将不会在标题中的令牌,然后代理将强制重定向到登录,登录后,我会与index.html文件以及响应头中的相关令牌一起呈现。设置Cookie响应和请求

所以我的问题如下: 如果登录后服务器用响应头中的特定标记响应index.html文件,如何让浏览器自动将标记附加到所有后续http请求上?

当我从服务器获取index.html文件后,浏览器将请求所有需要加载的应用程序的字体和库,如index.html文件中所引用的,但这些请求会执行请求头中不包含令牌,这又会导致浏览器再次被重定向以进行登录。这样的粘性循环...

我正在寻找使代理使用'Set-Cookie'返回标头中的令牌,但Chrome不会自动将该cookie添加到所有后续请求中。邮差似乎添加标题,但不是Chrome。我设置的cookie必须使用HttpOnly和Secure标签。所以我无法从JavaScript访问它。

如果还有其他问题,请让我。 在此先感谢。

亲切的问候 弗朗索瓦

+2

“我期待在做代理返回令牌使用‘设置Cookie’的标题,而Chrome不会自动添加的所有后续请求该Cookie。” - 它应该这样做。你对不同的资源使用不同的主机名吗?或重定向添加或删除www? – Quentin

+1

“我设置的Cookie必须使用HttpOnly和Secure标签” - 您的测试环境是否使用HTTPS? – Quentin

+0

我没有使用任何其他主机名,整个应用程序在一个网址上的单个节点上运行。 – UberSwyser

回答

0

我已经找到了答案,我的问题。

这就是我测试的方法。我创建了一个运行Apache的Docker容器,它托管了一个index.html,auth.html和login.html文件。然后我使用下面的httpd.conf设置使用mod_rewrite来帮助设置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?)。通过这种方式,我可以检查浏览器是否确实通过了认证。

谢谢所有回复和帮助的人!

亲切的问候 弗朗索瓦