Kong配置HMAC认证后HTTP请求正常HTTPS返回401未授权如何解决
问题描述
我参照Kong官方文档进行相关配置
我创建了一条HTTP路由,使用HTTP协议请求授权API时,得到200 OK的正常响应。
我另外创建了一条HTTPS路由,使用HTTPS协议请求授权API时,返回401未授权错误。
我已正确添加凭证并发起合法授权请求,目前十分困惑为何HTTP请求正常但HTTPS请求提示未授权,恳请大家帮忙排查解决。
排查解决方案
- 校验路由的
strip_uri配置是否匹配签名计算逻辑:如果HTTPS路由配置了自定义路径前缀,且开启了strip_uri,请求到达上游时的实际路径会和你计算签名时用的路径不一致,直接导致签名校验失败。确认HTTP和HTTPS两条路由的strip_uri配置是否完全一致,签名时使用的路径和网关实际转发的路径完全对齐。 - 核对Host头的签名规则:HTTPS请求默认端口为443,HTTP为80,如果你的HMAC配置要求校验Host头,注意确认签名计算时使用的Host值是否带端口,和实际发请求时携带的Host头完全一致,哪怕是协议默认端口也要保持两边对齐。
- 关闭HTTPS路由的
request_buffering配置测试:如果开启了请求缓冲,大请求会被Kong分片处理,HMAC插件无法读取完整请求体计算签名,会直接返回401。可以临时为HTTPS路由关闭该配置,验证是否可以正常鉴权。 - 检查HTTPS请求是否携带额外请求头:部分客户端发送HTTPS请求时会默认追加
X-Forwarded-Proto、X-Forwarded-Port等头字段,如果你的HMAC配置要求校验所有请求头,这些额外未参与签名计算的头会直接导致校验失败。可以抓包对比HTTP和HTTPS请求的头差异,确认所有参与校验的头都已经加入签名计算。 - 核对请求体校验逻辑:如果开启了
validate_request_body配置,确认HTTPS请求的请求体没有被网关层修改编码、追加字段等,保证签名时计算的请求体哈希和网关收到的请求体哈希完全一致。
内容的提问来源于stack exchange,提问作者favor ziyi
相关产品推荐
相关产品推荐

