Nginx:auth_request 不会将用户 cookie 传递给内部请求

Nginx:auth_request 不会将用户 cookie 传递给内部请求

我正在按照以下说明进行操作https://developers.shopware.com/blog/2015/03/02/sso-with-nginx-authrequest-module/使用 Nginx 的模块保护一些代理的 Web 应用程序auth_request

我的部分中有以下几行server。对于每个传入的请求,nginx 将向身份验证服务器 (auth.example.com) 发出授权请求。

auth_request /auth.php;

location = /auth.php {
    internal;
    proxy_pass https://auth.mydomain.com;
}

授权服务器是我自己写的。我写了一个 PHP 脚本,它只是检查 cookie 是否存在PHPSESSID,并检查$_SESSION['username']用户最初进行身份验证时设置的值。

但是,由于反向代理是内部代理,因此用户的PHPSESSIDcookie 不会被传递到授权服务器。

如何将PHPSESSIDcookie 从原始请求复制到内部授权请求?

故障排除尝试

这是我的auth.php脚本。它使用两个不同的 4xx 状态代码进行调试。

<?php
if (! isset($_COOKIE['PHPSESSID'])) {
    http_response_code(403);    # No cookie
    exit;
}

session_start();

# Check to see if the session username is set
if (! isset($_SESSION['username'])) {
    http_response_code(401);    # Unauthorized
    exit;
}
else {
    echo "OK " . $_SESSION['username'];
}
?>

我很确定该 cookie 没有被传递,因为当我在浏览器中访问授权 URL 时(https://auth.mydomain.com/auth.php),我得到了 200 状态代码。如果 cookie 不存在,我的脚本将返回 403。根据 Nginx 日志,它得到的就是这个。

我也尝试过以下location配置,但没有成功。这个配置不使用请求internal,而是常规的proxy_pass

location = /auth.php {
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
    proxy_pass https://auth.mydomain.com;
}

相关内容