使用JWT和Lambda授权器保护AWS API网关:Clerk实践指南
通过HTTP访问AWS服务的常见方式之一是通过API网关。API网关是AWS提供的一个集中入口,能够与多种服务集成,为应用程序或服务构建无服务器后端。为了确保安全性,API网关提供了一个名为“授权器(Authorizer)”的功能,用于在流量到达后端服务之前保护端点。
什么是API网关授权器?
API网关授权器是一种安全机制,允许您锁定API端点,仅允许经过授权的请求访问。它与AWS的多种服务兼容,例如Lambda和EC2等服务可以内置逻辑验证请求,而DynamoDB等服务则需要通过授权器来保护。
当授权器连接到端点时,API网关会首先验证请求是否由授权方发送,然后再将其传递到后端服务。如果验证失败,请求将被拒绝。
授权器的工作原理
假设您有一个简单的无服务器API,它结合了API网关和一系列Lambda函数:
-
无授权器的情况:请求直接传递到Lambda函数,Lambda代码需要自行验证请求的有效性。

-
有授权器的情况:请求首先发送到授权器进行验证,只有通过验证的请求才会传递到后端服务。

授权器的优势在于集中管理授权逻辑,保护难以直接保护的服务,并通过缓存减少AWS账单。
授权器的类型
根据API网关的配置类型,授权器分为多种类型。本文将重点介绍与Clerk兼容的两种授权器:JWT授权器和Lambda授权器。
JWT授权器
JWT授权器使用JSON Web密钥集(JWKS)验证令牌。Discovery端点提供了身份提供者(IdP)的信息,例如JWT的发布者、支持的授权范围以及令牌中包含的信息。
当收到受JWT授权器保护的请求时,API网关会使用JWKS和声明中的受众值(aud)验证令牌。如果验证成功,请求将被传递到后端服务。
配置JWT授权器
- 在Clerk仪表板中,导航到API密钥,获取前端API URL作为OpenID Connect Discovery端点。
- 配置
aud声明值,例如“ClerkJwtAuthorizer”。 - 在AWS API网关中,创建JWT授权器并附加到需要保护的路由。

Lambda授权器
Lambda授权器允许您使用自定义Lambda函数验证入站请求。它提供了最大的灵活性,但配置相对复杂。Lambda授权器适用于REST和HTTP类型的API网关。
配置Lambda授权器
- 在Clerk仪表板中,获取JWT公钥。
- 创建一个Lambda函数,使用
jsonwebtoken库验证令牌,并根据声明中的用户元数据(如角色)决定是否允许请求。 - 将Lambda函数打包为ZIP文件并上传到AWS Lambda。
- 在API网关中,创建Lambda授权器并附加到需要保护的路由。

使用Clerk保护API网关
Clerk通过简单的配置支持JWT和Lambda授权器。当用户登录应用程序时,Clerk会生成一个短期令牌并存储在浏览器Cookie中。开发者可以轻松提取该令牌并将其添加到HTTP请求的授权头中。
配置步骤
- 在Clerk仪表板中,添加自定义声明(如
aud或用户角色)。 - 在AWS API网关中,创建并配置授权器。
- 将授权器附加到需要保护的路由。
总结
授权器是保护API网关端点的第一道防线。通过使用JWT授权器和Lambda授权器,您可以灵活地控制API访问权限。Clerk提供了便捷的工具来生成和管理令牌,使得配置过程更加简单。
在本指南中,我们详细介绍了如何使用JWT授权器保护端点,以及如何通过Lambda授权器实现更细粒度的访问控制。通过这些方法,您可以有效地提升API网关的安全性。
原文链接: https://clerk.com/blog/how-to-secure-api-gateway-using-jwt-and-lambda-authorizers-with-clerk
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)