我从 PHP 发出一个 401 标头和一个带有自定义值“应用程序”的 WWW-Authenticate 标头。自定义值阻止浏览器加载 Apache 授权弹出窗口,就像 WWW-Authenticate 标头设置为“基本”一样。这是我的应用程序处理身份验证时所需的行为。这一切都很好,似乎遵循 401 状态代码的意图,比发出 403 标头更好。
当我在 Apache 配置中已经具有 Apache 身份验证设置的服务器上运行此程序时,就会出现问题。401 标头导致 Apache 发送 Apache 配置中指示的 WWW-Authenticate 方法,而不是我从 PHP 发出的 WWW-Authenticate 标头。因此,响应标头变为 Apache 配置中的“基本”,而不是从我的应用程序发出的“应用程序”。这会导致无限的授权循环,并且 Apache auth 弹出窗口不断出现。
我现在对此的解决方案是只发出一个 403 标头,但这样做似乎不正确。403 表示该请求永远不会被授予,即使用户进行了身份验证。
我是否应该不使用 401 标头进行应用程序级登录?似乎它仅用于 HTTP 身份验证。如果不是,403真的适合这个吗?我找遍了整个地方,找不到一个明确的标准。