在现代 Web 应用程序中,单页应用程序(SPA)已经成为了一个非常常见的架构。SPA 可以提供更快的用户体验,更好的性能和更好的交互性。然而,与传统的多页应用程序不同,SPA 需要在前端实现授权认证。本文将介绍 SPA 中如何实现授权认证,包括如何使用 JSON Web Token(JWT)进行身份验证和授权。
JSON Web Token(JWT)
JSON Web Token(JWT)是一种开放标准(RFC 7519),用于在不同的应用程序之间安全地传输信息。JWT 可以包含任何信息,并使用签名进行验证。JWT 通常用于身份验证和授权,因为它可以验证用户的身份并授权访问特定的资源。
JWT 由三部分组成:头部、负载和签名。头部包含算法和令牌类型,负载包含要传输的信息,签名用于验证令牌的完整性。JWT 通常在身份验证后由服务器签发,然后在客户端存储。当客户端需要访问受保护的资源时,它会将 JWT 包含在请求中,并且服务器将验证 JWT 的签名以确保它是有效的。
实现授权认证
在 SPA 中实现授权认证需要执行以下步骤:
- 用户登录并获得 JWT。
- 将 JWT 存储在客户端本地存储中。
- 在每个请求中将 JWT 包含在请求头中。
- 服务器验证 JWT 的签名以确保它是有效的。
- 如果 JWT 有效,则授权访问受保护的资源。
用户登录并获得 JWT
当用户登录时,服务器将生成并返回 JWT。JWT 应该包含用户的身份信息和过期时间。以下是一个生成 JWT 的示例代码:
-- -------------------- ---- ------- ----- --- - ------------------------ ----- ---- - - --- ---- ----- ----- ----- ------ ---------------------- -- ----- ----- - -------------- ---------------- - ---------- ---- ---
在这个示例中,我们使用 jsonwebtoken
包生成 JWT。jwt.sign()
方法接受三个参数:要签署的负载、密钥和选项。在这个示例中,我们将用户对象作为负载、my-secret-key
作为密钥并设置过期时间为 1 小时。
将 JWT 存储在客户端本地存储中
当客户端收到 JWT 时,它应该将 JWT 存储在本地存储中以便以后使用。以下是一个将 JWT 存储在本地存储中的示例代码:
localStorage.setItem('jwt', token);
在每个请求中将 JWT 包含在请求头中
当客户端需要访问受保护的资源时,它应该将 JWT 包含在请求头中。以下是一个将 JWT 包含在请求头中的示例代码:
-- -------------------- ---- ------- ----- ------- - - -------------- ------- ------------------------------- -- -------------------------------- - ------- -- -------------- -- - -- ---- -- ------------ -- - -- ---- ---
在这个示例中,我们使用 fetch()
方法发送 API 请求,并在请求头中包含 JWT。Bearer
是 JWT 的类型,后面跟着 JWT 的值。
服务器验证 JWT 的签名以确保它是有效的
当服务器收到请求时,它应该验证 JWT 的签名以确保它是有效的。以下是一个使用 Node.js 验证 JWT 的示例代码:
-- -------------------- ---- ------- ----- --- - ------------------------ ----- ----- - --------------------------------- ------ ----------------- ---------------- ----- -------- -- - -- ----- - -- --- ------- - ---- - -- --- ------- - ---
在这个示例中,我们使用 jsonwebtoken
包验证 JWT。jwt.verify()
方法接受三个参数:要验证的 JWT、密钥和回调函数。如果 JWT 无效,则回调函数将返回错误,否则它将返回解码的 JWT。
如果 JWT 有效,则授权访问受保护的资源
如果 JWT 有效,则服务器应该授权访问受保护的资源。以下是一个使用 Express.js 授权访问受保护资源的示例代码:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ------------------------ ----- --- - ---------- ------------- ---- ----- -- - ----- ----- - --------------------------------- ------ ----------------- ---------------- ----- -------- -- - -- ----- - ------------------------------------- - ---- - -------- - -------- ------- - --- --- ---------------------------------- ----- ---- -- - ---------------- -------------------- --- ---------------- -- -- - ------------------- ------- -- ---- ------- ---
在这个示例中,我们使用 Express.js 创建一个 HTTP 服务器,并在每个请求中验证 JWT。如果 JWT 无效,则服务器会返回 401 状态码。否则,它将授权访问受保护的资源。
总结
在 SPA 中实现授权认证需要使用 JWT 进行身份验证和授权。JWT 可以在客户端和服务器之间安全地传输信息,并使用签名进行验证。SPA 中的授权认证可以提供更好的安全性和用户体验。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65e3f54d1886fbafa402ec8a