随着云计算和 Serverless 技术的发展,越来越多的企业和个人选择使用 Serverless 架构来构建自己的应用程序。在 Serverless 应用中,用户不需要关心后端运行的服务器,所有的计算资源都由云服务提供商管理。这种架构下,前端和后端之间的通信变得非常重要。
在传统的应用程序中,常用的身份验证和授权方法是 Session 和 Cookie。但在 Serverless 应用中,这种方式并不是最优的选择,因为 Serverless 不会保存 Session 和 Cookie。因此,为了解决身份验证和授权的问题,使用 JWT 来保护 Serverless 应用是一个不错的选择。
什么是 JWT?
JWT,全称为 Json Web Token,是一种开放标准(OAuth 2.0 规范下的一部分)。它是一个轻量级的身份验证和授权方案,通过在请求头或 cookie 中传递加密的 JSON 数据,实现前端和后端之间的身份认证和授权。
一个 JWT 包含三部分:
- Header:包含算法和类型信息,比如 {"alg": "HS256", "typ": "JWT"}。
- Payload:包含要传递的数据,比如 {"sub": "1234567890", "name": "John Doe", "exp": 1516239022}。
- Signature:基于 Header 和 Payload 根据定义好的算法生成的签名,例如 HmacSHA256 。
将 Header 和 Payload 通过 BASE64 编码拼接生成一个字符串,再将该字符串通过指定的算法加密生成 Signature,最后将这三部分用点号 . 连接起来,就是一个完整的 JWT。比如 eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJzdWIiOiAiMTIzNDU2Nzg5MCIsICJuYW1lIjogIkpvaG4gRG9lIiwgImV4cCI6IDE1MTYyMzkwMjJ9.uYX8IvgF_YVB0b0dnRWLmczJIn-KaJOsI6vgsj96FJ0。
在 Serverless 应用中使用 JWT 的步骤
使用 JWT 保护 Serverless 应用需要以下步骤:
1. 用户登录
用户使用用户名和密码等信息向 Serverless 应用发起登录请求,后台验证成功后,生成一个 JWT 并返回给前端。
-- -------------------- ---- ------- ----- --- - ------------------------ ----- ------ - --------- -- ---- -------- --------------- --------- - -- ------------- ----- ----- - ---------- --------- ---- --------------------- - ----- - --- - ---- -- ------- -- -------- ------ - ----- -- -
2. 在请求头或 cookie 中传递 JWT
在每个请求中,将生成的 JWT 放入请求头中或通过 cookie 传递给后端。在 Serverless 应用中,可以使用 API Gateway 代理请求,并在其中校验 JWT。
3. 校验 JWT
在 API Gateway 中,针对每个需要鉴权的请求,使用 Lambda 函数对 JWT 进行校验,验证 JWT 的有效性和是否过期,只有校验通过的请求才可以继续处理。
-- -------------------- ---- ------- ----- --- - ------------------------ ----- ------ - --------- -- ---- -------- ---------------- -------- --------- - ----- ----- - ---------------------------- -- ------- ----- ---- ----------------- ------- ----- -------- -- - -- ----- - ------------------------- - ---- - -- ------------ ----- - ------- - -------------- - -------- ------------- --- - --- -
结论
使用 JWT 身份验证和授权,是 Serverless 应用的一个可靠解决方案。通过在请求头或 cookie 中传递 JWT,可以保证前端和后端之间的安全通信。同时,通过有效期的设定,可以保证 JWT 的有效期。在 Serverless 应用中,可以使用 API Gateway 和 Lambda 配合,对 JWT 进行校验和处理。
总之,在 Serverless 应用中使用 JWT 身份验证和授权,是一种值得推荐的做法。
参考资料
- JWT 官方网站:https://jwt.io/
- Serverless 架构上的身份验证:https://serverless.com/blog/serverless-auth-with-json-web-tokens/
- Node.js JSON Web Token 实例使用:https://www.cnblogs.com/chyingp/p/nodejs-learning-jwt.html
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/675128d48bd460d3ad870ab3