如何定义Istio策略以拒绝携带过期JWT访问令牌的请求
Istio JWT过期请求拦截配置方案
Istio的RequestAuthentication组件默认会自动校验JWT的所有标准声明,包括exp(过期时间)、nbf(最早生效时间)、签名合法性、颁发者匹配性,不需要额外添加配置开启过期校验。只要请求头里携带了JWT令牌,RequestAuthentication就会自动校验,过期的令牌会直接返回401 Unauthorized响应。
如果你的场景还需要拒绝所有未携带JWT的请求,可按以下步骤配置:
1. 确认RequestAuthentication配置完整
确保你的RequestAuthentication已经配置了正确的颁发者和公钥地址,KNative服务可以直接用KNative内置标签做服务匹配,示例配置如下:
apiVersion: security.istio.io/v1beta1 kind: RequestAuthentication metadata: name: knative-jwt-auth namespace: <你的服务所在命名空间> spec: selector: matchLabels: # KNative服务可直接用内置标签匹配,无需自定义标签 serving.knative.dev/service: <你的KNative服务名称> jwtRules: - issuer: "<你的JWT颁发者地址,需要和令牌中iss声明完全一致>" jwksUri: "<你的JWKS公钥获取地址>" # 若你的JWT使用非标准的过期字段名,可添加以下配置指定 # claimValidation: # - claim: "custom_exp" # required: true
2. (可选)配置AuthorizationPolicy强制要求携带有效JWT
如果需要禁止所有未携带有效JWT的请求访问服务,添加如下AuthorizationPolicy配置即可:
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: require-valid-jwt namespace: <你的服务所在命名空间> spec: selector: matchLabels: serving.knative.dev/service: <你的KNative服务名称> action: DENY rules: - from: - source: # 匹配所有未通过JWT校验的请求,包括未携带JWT、JWT过期、签名错误等场景 notRequestPrincipals: ["*"]
3. 验证效果
- 携带过期JWT发起请求,会收到
401 Unauthorized响应 - 携带合法未过期JWT发起请求,可正常访问服务
- 若配置了强制校验规则,未携带JWT的请求会收到
403 Forbidden响应
内容的提问来源于stack exchange,提问作者Poulad
相关产品推荐
相关产品推荐

