JWT
API开放平台提供了JWT(JSON Web Token)鉴权机制,旨在为API调用提供安全、高效的身份验证和权限控制。
什么是JWT鉴权?
JWT鉴权是一种基于JSON Web Token的身份验证机制。JWT是一种紧凑的、URL安全的令牌格式,用于在不同系统间安全地传输信息。JWT包含了身份验证和授权信息,通过数字签名确保其完整性和真实性。
- JWT结构:
- Header(头部):声明类型和签名算法。
- Payload(负载):包含用户身份和授权信息。
- Signature(签名):用于验证令牌的真实性和完整性。
核心功能
- 令牌生成与签发:
- 服务器在用户通过身份验证后生成JWT,包含用户的身份信息和权限。
- 使用预先共享的密钥或私钥对JWT进行签名,确保令牌的真实性和防篡改。
- 令牌传递与存储:
- 客户端在后续请求中通过HTTP头部(通常是Authorization头部)携带JWT进行身份验证。
- JWT可以存储在客户端的本地存储、会话存储或Cookie中,便于跨请求携带。
- 令牌验证与解析:
- 服务器接收到请求后,使用共享密钥或公钥验证JWT的签名。
- 验证通过后,解析令牌获取用户的身份和权限信息,进行相应的授权操作。
- 令牌刷新与失效:
- 支持短期有效的JWT和基于刷新令牌机制,确保令牌的安全性和及时失效。
- 用户可以通过刷新令牌机制获取新的JWT,延长登录会话而无需重新登录。
优势
- 无状态和分布式支持:
- JWT鉴权机制是无状态的,服务器无需存储会话信息,适合分布式系统和微服务架构。
- 客户端每次请求都携带完整的身份信息,便于跨系统和跨服务的身份验证。
- 高效和灵活:
- JWT格式紧凑,传输和解析效率高,适合在移动设备和带宽受限环境下使用。
- 支持自定义Payload字段,灵活传递用户身份和权限信息,满足多样化业务需求。
- 安全性:
- 使用数字签名确保令牌的真实性和完整性,防止篡改和伪造。
- 支持多种签名算法(如HMAC、RSA),根据安全需求选择合适的算法。
- 标准化和广泛支持:
- JWT是开放标准(RFC 7519),在业界广泛应用和支持,拥有丰富的开发库和工具。
- 兼容多种编程语言和框架,易于集成和实现。
操作演示
- 配置鉴权时,鉴权类型选
Jwt
,填写鉴权信息:
字段名称 | 说明 |
---|---|
参数位置 | 鉴权校验放置在请求的位置,支持Header、Query、Body |
参数名称 | 参数名称 |
Iss | 签发者 |
签名算法 | 支持HS256、HS384、HS512、ES256、ES384、ES512、RS256、RS384、RS512 |
Secret | 密钥,仅在签名算法为HS256、HS384、HS512有效 |
RSA公钥 | RSA公钥,仅在算法为ES256、ES384、ES512、RS256、RS384、RS512有效 |
用户名 | 用户名 |
用户名JsonPath | 用户字段在payload中的路径,格式参考json path |
校验字段 | 支持选择exp,nbf |
是否Base64加密 | 是否base64编码签名,仅在HS256、HS384、HS512有效 |
隐藏鉴权信息 | 转发给上游服务时,是否隐藏用户信息 |
Jwt快速构造可参考 jwt生成工具
JWT鉴权示例
鉴权信息
Header
{
"alg": "HS256",
"typ": "JWT"
}
Playload
{
"sub": "1234567890",
"iss":" apinto",
"name": "John Doe",
"iat": 1516239022,
"exp": 1713339896
}
其中,用户名为John Doe
,过期时间为1713339896
,即2024-04-17 15:44:56
,签发机构为apinto
Secret
设置为apinto
,如下图
Token
根据上述配置,生成Token
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwiaXNzIjoiIGFwaW50byIsIm5hbWUiOiJKb2huIERvZSIsImlhdCI6MTUxNjIzOTAyMiwiZXhwIjoxNzEzMzM5ODk2fQ.IYp4hR_vTCFgOQdF3qbgOU7hrWo4W-WeFkIXdC7pqs8
配置JWT鉴权
- 配置鉴权时,鉴权类型选
Jwt
,填写鉴权信息:
配置说明
字段名称 | 说明 |
---|---|
参数位置 | 鉴权校验放置在请求的位置,支持Header、Query、Body |
参数名称 | 参数名称 |
Iss | 签发者 |
签名算法 | 支持HS256、HS384、HS512、ES256、ES384、ES512、RS256、RS384、RS512 |
Secret | 密钥,仅在签名算法为HS256、HS384、HS512有效 |
RSA公钥 | RSA公钥,仅在算法为ES256、ES384、ES512、RS256、RS384、RS512有效 |
用户名 | 用户名 |
用户名JsonPath | 用户字段在payload中的路径,格式参考json path |
校验字段 | 支持选择exp,nbf |
是否Base64加密 | 是否base64编码签名,仅在HS256、HS384、HS512有效 |
隐藏鉴权信息 | 转发给上游服务时,是否隐藏用户信息 |
配置完成后,点击确认
即可。
调用
在请求头部输入上面生成的Token
,对API进行调用