我有一个Web服务器通过相同的SSL VirtualHost发布不同的服务,两个最常用的是PhpMyAdmin和Cacti。 这些(以及其他)使用“cookie”风格的authentication,以HTMLforms询问用户和密码(因此不使用HTTPauthentication)。
在同一个主机名上,Safari浏览器没有pipe理好存储的密码:如果我用一个用户foologin到一个应用程序,然后进入应用程序二,它会在login表单中向我build议用户foo和它的密码。 只需将用户名更改为bar就足以让Safari在其表单字段中自动填充正确的密码。 令人讨厌的是,但我可以忍受它 – 用户名与我们使用的密码相比较短且容易记住。
safari5更新后,这似乎不再是真实的:如果我存储在https://www.foobarbaz.com https://www.foobarbaz.com/app1和Safari的safari(实际上是用户钥匙串)证书https://www.foobarbaz.com / app2似乎没有办法让它自动完成两个基于URL。 即使编辑钥匙串来添加path(它将只存储主机名默认)不起作用。
有什么我可以做,让它按我想要的方式工作,同时仍然保持一切主机名? 修改任何服务器端当然是可能的,但我不能将应用程序切换到HTTP身份validation(并不是每个人都会支持它),以使用不同的“领域”。
据我所知,在HTTP请求URI中,主机是scheme(即http://)和顶级域(即.com/ )的结尾之间的一切,主机右侧的所有内容都是请求主机处理。
您的问题的最佳解决scheme是使用子域.. https://app1.foobarbaz.com/和https://app2.foobarbaz.com 。 您需要将子域放在foobarbaz.com域的DNS区域中,并在Web服务器上configuration虚拟主机以使用/app1和/app2处理请求。 Apache和IIS都可以完成您所需要的function,而无需重新configuration应用程序。 您可能必须获取(或创build)新的SSL证书才能在没有浏览器安全错误的情况下工作。
显然这是不允许的,根据(恕我直言,愚蠢的)组织政策。 OP应该努力改变这个政策,因为它与互联网的运作方式相冲突。
也就是说,另一种方法是修改每个应用程序为自己部署一个特定的cookie,然后查看所有返回的cookie来find自己的cookie。 如何完成取决于平台,并且是一个StackOverflow问题。
如果您的意思是使用HTTP身份validation(而不是HTML表单)进行身份validation,则可以这样做:您可以通过设置不同的身份validation领域以及URL来使其工作。 喜欢这个:
<Location /abc/> AuthType Basic AuthName "Realm for ABC" AuthUserFile /var/www/html/domain.org/abc/.htpasswd require valid-user </Location> <Location /xxx/> AuthType Basic AuthName "Realm for XXX" AuthUserFile /var/www/html/domain.org/xxx/.htpasswd require valid-user </Location>
有趣的部分是AuthName 。 然后Safari会记住/自动完成每个域的HTTPauthentication对话框,而不是每个域。