我在测试服务器上启用了 Apache 基本身份验证,并且运行良好:
AuthType Basic
AuthName "testing"
AuthUserFile /home/www/.htpasswd
Require user MyUser
deny from all
但它也试图验证通过 OPTIONS 方法发送的请求。这是一个问题,因为 CORS 规范规定你应该Exclude user credentials
-https://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0
如何禁用使用 OPTIONS 方法传入的请求的身份验证?
(与 Tomcat 类似:在 Tomcat 中禁用 OPTIONS 请求的身份验证)
答案1
您或许可以使用 Apache 表达式(Apache 2.4+)仅在请求方法为以下情况时应用 HTTP Basic Auth 指令不是“选项”。
例如:
<If "%{REQUEST_METHOD} != 'OPTIONS'">
# Authentication directives...
</If>
参考:
https://httpd.apache.org/docs/2.4/expr.html
deny from all
您不需要将此(Apache 2.2)指令与基本身份验证指令一起使用。
答案2
尝试:
<RequireAny>
Require method OPTIONS
Require valid-user
</RequireAny>
使用 Apache 模块 mod_authz_core https://httpd.apache.org/docs/2.4/mod/mod_authz_core.html
附言:以上适用于我
AuthName "Dostęp wymaga autoryzacji. Nieautoryzowany dostęp jest logowany"
AuthUserFile /home/website/.htpasswd
AuthType basic
Order Deny,Allow
Satisfy any
Deny from all
Require valid-user
// this is for use with mod_setenvif.c
Allow from env=noauth