本文介绍JWT认证流程,以及如何通过控制台为HTTP触发器配置JWT认证鉴权。
背景信息
函数计算支持为HTTP触发器开启JWT认证鉴权。JWT(JSON Web Token,RFC7519)是一种基于令牌的便捷请求认证鉴权方案。用户状态信息存储在token
中,由客户端提供,函数(服务端)无需存储,是一种Serverless友好的鉴权方式。函数计算可以通过用户绑定在HTTP触发器上的Public JWKS实现对HTTP调用请求的JWT认证。并根据HTTP触发器上的配置,将claims
作为参数转发给函数,函数无需对请求进行鉴权,只需关注业务逻辑即可。如果需要了解JWT的token
认证流程及基础知识,请参见基于JWT的token认证和JWT简介。
使用说明
- 可以使用任何方式来生成和分发JWT,函数计算负责通过触发器配置的Public JWKS来认证JWT。
- 支持不含
kid
的JWK。 - 支持为一个触发器配置多个JWK。
- 支持从
header
、Query
参数(GET)、表单参数(POST)和cookie
中读取Token。 - 支持将
claims
作为header
、Query
参数(GET)、表单参数(POST)和cookie
转发给函数。
token
等敏感信息进行保护,可以有效避免Token泄漏。JWT认证流程

- 客户端向自定义授权服务发起认证请求,请求中一般会携带终端用户的用户名和密码。
- 自定义授权服务读取请求中的验证信息(例如用户名、密码等)进行验证,验证通过之后使用私钥生成标准的
token
。 - 自定义授权服务将携带
token
的应答返回给客户端,客户端需要将这个token
缓存到本地。 - 客户端向HTTP触发器发送业务请求,请求中携带
token
。 - HTTP触发器使用用户设置的公钥对请求中的
token
进行验证。 - 验证通过之后,将请求透传给受保护的函数。
- 受保护的函数处理业务请求,并进行应答。
- HTTP触发器将业务应答返回给客户端。
前提条件
操作步骤
- 登录函数计算控制台,在左侧导航栏,单击服务及函数。
- 在顶部菜单栏,选择地域,然后在服务列表页面,单击目标服务。
- 在函数管理页面,单击目标函数名称,然后在函数详情页面,单击触发器管理(URL)页签。
- 在触发器管理(URL)页签,单击HTTP触发器操作列的编辑按钮。
- 在编辑触发器面板,设置以下配置项,然后单击确定。
结果验证
在调测工具(本文以Postman工具为例)中,根据HTTP触发器的JWT配置,填写访问地址、Token等,验证是否可以正常访问触发器。如下图所示。

- ①为获取的触发器的公网访问地址。您可以在目标函数的触发器管理(URL)页签查看。
- ②为JWT Token 配置中设置的参数名称和Token。Token示例如下。
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9uIFNub3ciLCJhZG1pbiI6dHJ1ZSwiZXhwIjo0ODI5NTk3NjQxfQ.eRcobbpjAd3OSMxcWbmbicOTLjO2vuLR9F2QZMK4rz1JqfSRHgwQVqNxcfOIO9ckDMNlF_3jtdfCfvXfka-phJZpHmnaQJxmnOA8zA3R4wF4GUQdz5zkt74cK9jLAXpokwrviz2ROehwxTCwa0naRd_N9eFhvTRnP3u7L0xn3ll4iOf8Q4jS0mVLpjyTa5WiBkN5xi9hkFxd__p98Pah_Yf0hVQ2ldGSyTtAMmdM1Bvzad-kdZ_wW0jcctIla9bLnOo-Enr14EsGvziMh_QTZ3HQtJuToSKZ11xkNgaz7an5de6PuF5ISXQzxigpFVIkG765aEDVtEnFkMO0xyPGLg
- ③为Claim透传给函数后的名称。
配合自定义域名使用JWT鉴权

如上图所示,自定义域名位于HTTP触发器之前,用户的请求会先经过自定义域名的处理,然后才会被HTTP触发器处理,JWT认证鉴权是位于HTTP触发器上的逻辑。下文介绍自定义域名如何使用JWT认证鉴权。
普通自定义域名
如果为自定义域名配置了路由,未配置重写策略,那么到达HTTP请求中的Path就是自定义域名请求的Path。
www.fc-jwt.com
设置的路由规则如下,且函数jwt-demo
的HTTP触发器设置的JWT鉴权配置中请求路径黑名单配置为/fc-jwt/auth/*。路径 | 服务名 | 函数名 | 版本 |
---|---|---|---|
/fc-jwt/* | jwt | jwt-demo | 1 |
如果用户请求URL为/fc-jwt/auth/aliyun,则HTTP触发器会对请求进行校验,因为到达HTTP触发器的请求的Path与设置的请求路径黑名单匹配。
结合自定义域名的重写功能
如果为自定义域名配置了路由,且配置了重写策略,那么到达HTTP请求中的Path为自定义域名重写后的Path。关于自定义域名的重写功能,请参见配置重写策略(公测中)。
www.fc-jwt.com
设置的路由规则如下,函数jwt-demo
的HTTP触发器设置的JWT鉴权配置中请求路径黑名单配置为/fc-jwt/auth/*,且配置了通配符重写策略(匹配规则为/fc-jwt/*
,替换规则为 /$1
)。路径 | 服务名 | 函数名 | 版本 |
---|---|---|---|
/fc-jwt/* | jwt | jwt-demo | 1 |
如果用户请求URL为/fc-jwt/auth/aliyun,则重写后的URL为/auth/aliyun。关于通配符重写规则,请参见通配符重写。此时,HTTP触发器不会对请求进行校验,因为到达HTTP触发器的请求的Path为/auth/aliyun,与设置的请求路径黑名单不匹配。
如果将触发器请求路径黑名单配置为/auth/*,那么HTTP触发器会对URL为/fc-jwt/auth/aliyun的请求进行JWT校验。
常见问题
为什么触发器开启JWT鉴权之后,访问函数提示:invalid or expired jwt?
- 您的Token签名、格式等非法,导致校验出错。
- 您的Token已过期,导致校验出错。
- 您的Token中的
kid
与您在触发器中配置的JWKS不匹配,或者匹配到的JWK不准确,无法正确检验Token。
为什么触发器开启JWT鉴权之后,访问函数提示:the jwt token is missing?
该提示说明函数计算无法根据JWT Token配置找到Token,请检查请求中是否携带了Token、Token的位置或Token的名称是否正确。