【问题标题】:HTTP Basic Authentication passed to different subdomainHTTP 基本身份验证传递到不同的子域
【发布时间】:2018-03-15 23:04:48
【问题描述】:

我正在尝试将基本 HTTP 身份验证从一个子域传递到另一个子域,以免要求人们登录两次。

第一个子域支持 PHP,而第二个子域是 ASP 应用程序。 ASP 应用程序要求提供基本 HTTP 身份验证提示(一旦提交,他们就可以访问网络应用程序),但我的目标是让它强制正确登录,这样它就不会提示用户并且他们可以访问网络立即应用。

在 PHP 方面,我尝试了以下方法:

$base64value = base64_encode($value);
setcookie("Authorization",$base64value, time()+3600*24);

我也成功获得了标头身份验证,但它似乎没有将其传递到下一页,即使它是相同的值

header('WWW-Authenticate: Basic realm="'.$base64value.'"');

我还尝试将带有 cookie 的域设置为不走运。您不能通过 cookie 传递 HTTP 基本身份验证是真的吗?这似乎是两种不同的技术。

【问题讨论】:

    标签: http authentication basic-authentication


    【解决方案1】:

    基本身份验证使用 Web 客户端计算的 HTTP 标头 Authorization,而不是 cookie。所以是的,您不能使用这种技术传递身份验证。

    您需要重新设计身份验证。您可以查看 reverse-proxying 一个站点,或者设置一个 CAS 服务。

    【讨论】:

      【解决方案2】:

      你不想要setcookie;您只需要复制身份验证标头即可:

      header('Authorization: " . $_SERVER['AUTHORIZATION']);
      

      让我知道这是否有效。

      编辑:哦。忘记那个。我以为你在代理。是的,对此无能为力:您不能从第一个域的服务器端影响第二个域的 Authorization 标头。

      【讨论】:

        【解决方案3】:

        如果用户已经登录,您可以生成所有带有身份验证的链接:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-10-15
          • 2021-04-30
          • 2021-03-21
          • 2011-11-12
          • 2011-05-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多