跳到主要内容

JWT Policy

概述

JWT(JSON Web Token)策略用于验证包含在API请求中的令牌。它确保只有使用项目的正确JWT密钥和秘密生成的有效令牌的用户可以访问API。

该策略支持基于所选路径的令牌验证,使用RequiredPath或NotRequiredPath模式。此外,它可以与tokenBlacklistLogoutPath函数结合使用,以在注销时使令牌失效。

支持的算法:

  • HS256(HMAC SHA-256)
  • RS256(RSA SHA-256)

JWT令牌规则

要在APIM中成功验证JWT令牌:

  • JWT令牌必须包含在Authorization头中:
Authorization: bearer JWT_TOKEN
  • 令牌的有效载荷必须包含:
    • "apim_key_claim_name"与项目的JWT密钥。
    • "exp"字段以指示令牌过期时间。

示例有效载荷:

"apim_key_claim_name": "64c44d593be841bcec7fe768184e4c7e",
"exp": 1900000000

示例头:

"alg": "HS256",
"typ": "JWT"

JWT示例令牌:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGltX2tleV9jbGFpbV9uYW1lIjoiNjRjNDRkNTkzYmU4NDFiY2VjN2ZlNzY4MTg0ZTRjN2UiLCJleHAiOjE5MDAwMDAwMDB9.1kB5k-vM2Cef7ZYTyJUQ-LsDUmG4K7sJUfrJ3FqgYxQ

配置详情

JWT路径匹配

JWT验证可以应用于所选路径,使用两种模式:

Option Description
RequiredPath仅对列出的方法/路径对应用JWT身份验证。所有其他路径将不需要JWT。
NotRequiredPath对所有路径应用JWT身份验证,除了列出的路径。
备注

一次只能使用一种模式(RequiredPath或NotRequiredPath)。切换模式将重置先前的设置。

输入格式:

Method_Path

示例:

GET_/v1/test
适用于/v1/test的GET请求
POST_/v1/example
适用于 /v1/example 的 POST
ANY_/v1/apis
适用于 /v1/apis 的所有 HTTP 方法
GET_/v1/apis*
适用于 /v1/apis 下的所有子路径 (例如,/v1/apis/a)

tokenBlacklistLogoutPath

此功能允许 APIM 在发出注销请求并成功从 API 网关返回 HTTP 200 时将 JWT 令牌列入黑名单。

切换字段:

字段描述
useJWTBlacklistRevoking启用时,JWT 令牌将在注销响应时添加到黑名单存储中。这防止了同一令牌的进一步使用。
备注

无法更改:切换以防止此策略被删除。

无法更改设置值:切换以防止在设置后更改配置值。

Redis 配置(用于存储黑名单令牌)

选项 1:APIMRedis - 默认系统 Redis;无需手动配置。

选项 2:CustomRedis

Configuration FieldDescription
Redis HostRedis 服务器的地址(例如,127.0.0.1)。
Redis PortRedis 服务器的端口号(例如,6379)。
Redis Password认证密码。
Redis Database指定要使用的数据库索引(例如,1)。
Redis Pool SizeRedis 连接池中的最大连接数(默认:1000)。
Redis Pool Backlog等待可用连接的最大请求数(默认:30)。

选项 3:RedisCluster

Configuration FieldDescription
Redis Cluster Nodes集群节点地址(例如:redis-cluster.apim:6379)。
Redis Cluster Password用于身份验证的密码。
Redis Cluster Name指定集群名称(例如:kong_redis_cluster)。
Redis Connect Timeout建立 Redis 连接的超时时间(默认:1000ms)。
Redis Read Timeout从 Redis 读取数据的超时时间(默认:1000ms)。
Redis Send Timeout发送数据到 Redis 的超时时间(默认:1000ms)。
Redis Pool SizeRedis 连接池中的最大连接数(默认:1000)。
Redis Pool Backlog最大待处理连接数(默认:30)。
Redis Keepalive TimeoutRedis 连接关闭前的最大空闲时间(默认:55000ms)。