Kubernetes Nginx Ingress JWT认证场景auth-cache-key如何配置
针对JWT认证场景的auth-cache-key配置方案
首先明确$remote_user变量的适用范围:该变量是Nginx原生提供的、仅用于HTTP Basic认证场景下存储解析出的用户名,在JWT认证场景下该变量默认是空值,官方示例的$remote_user$http_authorization是为Basic认证场景设计的,不适用于你的业务场景。
你的外部认证服务仅校验请求携带的JWT token本身,不依赖其他请求属性,因此缓存key只要能唯一标识一个JWT token即可,最优配置如下:
annotations: nginx.ingress.kubernetes.io/auth-url: http://auth-service/validate nginx.ingress.kubernetes.io/auth-response-headers: "authorization" nginx.ingress.kubernetes.io/auth-cache-key: '$http_authorization' nginx.ingress.kubernetes.io/auth-cache-duration: '1m' kubernetes.io/ingress.class: "nginx"
额外注意事项:
$http_authorization会完整携带请求头里的Authorization内容,包含Bearer前缀和token本身,天然可以唯一区分不同的token,不会出现不同token命中同一个缓存key的问题- 如果你的认证服务后续会加入请求路径、客户端IP等维度的校验逻辑,可以按需在缓存key中追加对应的Nginx变量,比如需要按客户端IP区分的话可以配置为
'$http_authorization$remote_addr' - 缓存时长不建议设置超过5分钟,避免JWT被吊销后缓存仍生效产生安全风险
内容的提问来源于stack exchange,提问作者Santosh
相关产品推荐
相关产品推荐

