我正在尝试将基本HTTP身份验证从一个子域传递到另一个子域,而不是要求人们登录两次。
第一个子域支持PHP,第二个子域是ASP应用程序。 ASP应用程序要求提供基本HTTP身份验证提示(一旦提交,他们就可以访问Web应用程序),但我的目标是使其强制正确登录,以便它不会提示用户并且他们可以访问Web应用程序马上。
在PHP方面,我尝试了以下内容:
$base64value = base64_encode($value);
setcookie("Authorization",$base64value, time()+3600*24);
我也成功获得了标头身份验证,但它似乎没有将它传递到下一页,即使它是相同的值
header('WWW-Authenticate: Basic realm="'.$base64value.'"');
我也尝试使用cookie设置域名,但没有运气。您是否无法通过cookie传递HTTP基本身份验证?这似乎是两种不同的技术。
答案 0 :(得分:2)
基本身份验证使用Web客户端计算的HTTP标头Authorization
,而不是cookie。所以,是的,您无法使用此技术传递身份验证。
您需要重新设计身份验证。您可以查看reverse-proxying其中一个网站,或设置CAS服务。
答案 1 :(得分:0)
你不想setcookie
;复制authenticate标头应该是您所需要的:
header('Authorization: " . $_SERVER['AUTHORIZATION']);
如果有效,请告诉我。
编辑:哦。算了。我以为你代理了。是的,没有什么可以做的:你不能影响第一个域上服务器端的第二个域的Authorization标头。答案 2 :(得分:0)
如果用户已登录,您可以使用身份验证生成所有链接:
<a href="https://<?php if (isset($_SERVER['PHP_AUTH_USER'])) {
echo $_SERVER['PHP_AUTH_USER'] . ":" . $_SERVER['PHP_AUTH__PW'] . "@";
?>subdomain.example.com/some/path/resource">Resource</a>
以上是未经测试的,但我们的想法是在URL中发送凭据,如下所示:
https://user:password@domain.com/path/to/resource
美丽的是,你甚至不仅限于子域。我可以想到许多聪明的方法来自动化这个URL重写,因此您不需要为网站中的每个链接手动执行此操作。