curl设置双层Basic Auth时接口层级认证不生效问题排查
双层Basic Auth认证不生效排查
问题根因
- curl的
-u参数本质是自动将传入的账号密码编码为Base64格式,生成Authorization: Basic <编码结果>请求头。你后续通过-H手动指定了同名的Authorization头,会覆盖-u生成的头,最终仅单条认证信息会被传递到服务端。 - 部分WEB服务器完成站点级Basic Auth校验后,会默认清除
Authorization请求头,导致后端接口无法拿到第二层认证信息。
解决方案
调整curl请求写法
将域名层级的认证信息直接嵌入请求URL,无需使用-u参数,避免请求头冲突,正确写法如下:
curl https://abc:abcd1234@example.com/test.json \ -k \ -H 'Authorization: Basic erwf234werwrefdsf234245wewrwer==' \ -d 'data={}'
服务端配置调整(按需操作)
如果调整curl写法后仍存在接口级认证不生效的问题,需要修改站点所属WEB服务器的配置,放行Authorization头向后端应用传递:
- Nginx 配置新增以下规则:
proxy_pass_request_headers on; proxy_set_header Authorization $http_authorization;
- Apache 配置新增以下规则:
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
内容的提问来源于stack exchange,提问作者Iwantha Lekamge
相关产品推荐
相关产品推荐

