HTTP基本身份验证传递到不同的子域

时间:2011-05-05 20:35:21

标签: http authentication basic-authentication http-basic-authentication

我正在尝试将基本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基本身份验证?这似乎是两种不同的技术。

3 个答案:

答案 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重写,因此您不需要为网站中的每个链接手动执行此操作。