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 Field | Description |
---|---|
Redis Host | Redis 服务器的地址(例如,127.0.0.1)。 |
Redis Port | Redis 服务器的端口号(例如,6379)。 |
Redis Password | 认证密码。 |
Redis Database | 指定要使用的数据库索引(例如,1)。 |
Redis Pool Size | Redis 连接池中的最大连接数(默认:1000)。 |
Redis Pool Backlog | 等待可用连接的最大请求数(默认:30)。 |
选项 3:RedisCluster
Configuration Field | Description |
---|---|
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 Size | Redis 连接池中的最大连接数(默认:1000)。 |
Redis Pool Backlog | 最大待处理连接数(默认:30)。 |
Redis Keepalive Timeout | Redis 连接关闭前的最大空闲时间(默认:55000ms)。 |