七牛云回调鉴权问题

问题描述

使用七牛云存储遇到了很多坑,比如这个回调鉴权就废了很多时间,特此记录。七牛的回调鉴权主要是通过在请求头上中一个 AUTHORIZATION 的字段中的值来与本地生成的签名生成的值进行比对,如果相同,认证通过。

HTTP协议中的 Authorization 请求消息头含有服务器用于验证用户代理身份的凭证,通常会在服务器返回401 Unauthorized 状态码以及WWW-Authenticate 消息头之后在后续请求中发送此消息头。

MDN web docs

但是,在业务服务器上使用 $_SERVER[‘HTTP_AUTHORIZATION’] 总是获取不到这个字段的内容,通过提交工单和搜索相关问题发现好像是Apache配置的问题。

解决方案

开启Apache配置中的rewrite,然后在入口目录中的.htaccess文件写入下面内容

1
2
3
#Authorization Headers
RewriteCond %{HTTP:Authorization} ^(.+)$
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]