JWT是一种基于令牌的便捷请求认证鉴权解决方案。用户状态信息存储在token中,由客户端提供,服务端无需保存,适合Serverless环境。通过用户绑定在自定义域名上的Public JWKS,函数计算可以实现对到达该域名的请求进行JWT认证。根据域名配置,将claims作为参数传递给函数,函数无需实现鉴权逻辑,请求会在网关里校验,成功才转发到后端函数。
简介
JSON Web Token (JWT)是一种开放标准(RFC 7519),定义了一种紧凑且自包含的方式,用于安全地在各方之间传输信息,以JSON对象的形式。这些信息可以被验证和信任,因为它们是数字签名的。JWT可以使用密钥(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。
使用限制
- 函数计算通过JWT认证配置的JWKS来校验请求中的jwt
- 支持配置多个jwk
- 支持从Header,query参数,cookies中读取Token
- 支持将claims作为header转发给函数
目前函数计算的JWT支持如下算法。
签名算法 | alg取值 |
---|---|
RSASSA-PKCS1-V1_5 | RS256 |
配置JWT认证
前提条件
创建自定义域名,且认证方式选择“JWT认证”
操作步骤
- 登录控制台,在左上角选择目标地域
- 在最左的菜单栏中选择高级功能 > 域名管理
- 在创建域名页面,展开认证设置
-
认证方式选择JWT认证
-
配置jwks
jwt鉴权需要用户提供有效的JWKS(JSON Web Set)。您可以使用在线生成工具生成,例如mkjwk.org。下文以使用mkjwk.org工具生成JWKS为例说明.
按图所示选择Key Use,Algorihm,Show X.509,点击Generate生成需要的公私钥和jwks
-
把public key填入jwks的keys字段里
-
使用https://jwt.io/ 生成请求用的jwt,如图所示
- 算法选择RS256
- playload根据需要配置,但必须有iss字段,值为访问的url,不带path
- 公私钥内容根据2.1步骤里生成的填写即可
- 左侧生成的“xxx.xxx.xxx”即为合法签名后的jwt内容
-
配置JWT Token(必填)
在JWT Token 配置配置项中,选择token
所在位置和token
的名称。
token
位置支持Header、Cookie、Query参数(GET。如果token
位置选择为Header,则还需为其指定前缀,函数计算在获取Token时,会删除此前缀。 -
配置JWT Claim转换(可选)
在JWT Claim 转换配置项中,选择透传给函数的参数所在位置、参数原始名称和参数透传给函数之后的名称。
映射参数位置支持Header
-