You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:57:01