是否应该使用Authorization请求头传递API密钥完成接口身份验证?
API密钥传递方案建议
优先选择 Authorization 头传递密钥
推荐使用 Authorization: API-Key xxx-xxx 的格式,这是目前行业通用的实践,理由如下:
- 符合HTTP协议的语义设计:
Authorization头本身就是为身份验证、授权凭证传递设计的,绝大多数API开发工具、网关、日志组件都会默认将该头的内容识别为敏感信息,自动做脱敏打码处理,能大幅降低密钥泄露的风险。如果用自定义头传递,大部分工具无法识别其敏感属性,很容易出现密钥明文泄漏在日志、调试输出中的问题,反而给API使用者增加不必要的风险。 - 开发者认知成本极低:虽然API-Key没有被纳入IANA的官方HTTP身份验证方案列表,但这个列表是登记制而非强制准入制,
Authorization: API-Key <密钥>的写法已经是全行业公认的通用用法,包括国内外主流云厂商的公开API很多都采用类似格式,使用者看到就能明白这是身份凭证,不需要额外解释。 - 适配Azure APIM的成本极低:Azure APIM原生支持通过策略提取
Authorization头中的API密钥做校验,不需要做复杂的自定义开发。
仅在特殊场景下使用自定义头
只有遇到以下两种情况时,才建议用my-key: xxx-xxx这类自定义头传递密钥:
- 你的API需要同时支持多种身份验证方式,比如同时要接收OAuth2的
Bearer令牌和API密钥,用Authorization头会产生冲突 - 你需要对接的部分老旧客户端不支持自定义修改
Authorization头内容
内容的提问来源于stack exchange,提问作者Kye
相关产品推荐
相关产品推荐

