前言
随着前端技术的不断发展,越来越多的项目采用 SPA (Single Page Application) 架构, SPAs 具有响应更快、友好的用户界面等优势,也会遇到许多挑战,尤其是用户认证和鉴权问题。
本文将介绍在 SPA 应用中如何实现用户认证和鉴权,并提供示例代码。
用户认证和鉴权的概念
用户认证 涉及对用户身份的验证,通常需要用户提供凭据(用户名和密码)。认证成功即可获取访问系统的权限。
鉴权 涉及对用户进行访问权限的验证,确保用户可以访问他们有权利访问的资源。鉴权通常需要在用户通过验证后进行。
现代 Web 应用通常使用 Token 鉴权,在用户登录后返回一定的 Token,这个 Token 随后可以在请求中发送给服务器,服务器使用 Token 返回用户有权访问的资源。
用户认证
在 SPA 中进行用户认证通常需要以下步骤:
- 用户在表单页面上输入凭据。
- 表单数据被提交到服务器进行验证。
- 如果凭据被验证为有效,则返回一个 Token。
- 客户端保存 Token 并将其包含在其后续请求中。
Token 方式
在现代 Web 应用程序中,经常使用 Token 进行身份验证和鉴权。Token 通常是从服务器返回的长字符串,因此必须在客户端和服务器之间进行安全传输。
使用浏览器发送 Token 时,最佳做法是使用 HTTP 头进行传输。为此,请执行以下操作:
axios.defaults.headers.common['Authorization'] = `Bearer ${token}`
在服务器端上,常见的方法是检查 HTTP 头部,以便在验证用户时识别出 Token。
JWT
JWT(JSON Web Tokens)是一种 Token 的实现,是一种已知签名的规范化 JSON 格式令牌。JWT 通常包括三个部分:头部、有效载荷和签名。
头部
头部布局应如下:
{ "alg": "HS256", "typ": "JWT" }
alg
表示签名算法,可以使用多个算法完成此操作,如 HMAC SHA256 或 RSA。typ
指出该值应为“JWT”。
有效载荷
有效载荷应可读,作为普通、人类可读的属性包含声明的集合。最流行的声明如下:
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
其中“sub”表示用户 ID,“name”表示用户的名称,“iat”指出此 token 发布的时间。
签名
签名需要使用密钥来完成。发出 JWT 的服务器将使用签名密钥创建签名,接收端可以使其与有效载荷和头部一起验证。
鉴权
当用户成功通过验证后,服务器会返回一个 Token。在实际应用中,使用这个 Token 来访问需要鉴权的资源。
前端路由鉴权
前端路由鉴权通常需要以下步骤:
- 保存 Token。
- 在进入每个受保护的路由之前检查 Token。
- 如果用户没有正确的 Token,则导航到登录界面。
以下是一个较好的路由鉴权的示例代码:
-- -------------------- ---- ------- ----- --------- - ---- ----- ----- -- - ----- -------- - ----------------------------- -- ---------- - ------ - ---- - -------------- - - ----- ------ - --- ----------- ------- - - ----- ---- ----- ------- ---------- ----- ------------ --------- -- ----------- ----------- -- -- - ----- --------- ----- -------- ---------- ----- - - --
后端鉴权
服务端鉴权通常需要以下步骤:
- 验证传入的 JWT Token。
- 检查是否有足够的访问权限来执行操作。
- 如果审核通过,则完成请求,不存在,返回错误信息。
以下是一个较好的实现服务端鉴权的示例:
-- -------------------- ---- ------- ----- ------------- - -------- -- - ----- ------ - ---------- ----- -------- - ---------- ------ -- ------- - ---------- ---- -- ------ -------- - ----- ----------- - ------- -- - ----- ------ - ---------- --- - ----------------- ------- ------ ---- - ----- ----- - ------ ----- - - ----- ------------------- - -------- ----------- -- - -- --------------------- -- --- ------ - ---------- --------------------- - ----- -------------------- - ----- ---- ----- -- - ----- ------------------- - ------------------------- -- --------------------- - ----- ----- - --------------------------- ----- -- -------------------- - ----- - ------ - - ----------------- ----- ---------- - ------------- -- ---------------------------- ------------ - ------ ------ - - - ------------------- - ------------------------ --------------------- ----- ---- -- - -- --------------------- --- --- --
结论
本文介绍了在 SPA 应用中实现用户认证和鉴权的基本概念、步骤和示例代码。我们介绍了前端路由鉴权和后端鉴权的实现方式。
实现 SPA 应用的用户认证和鉴权,在一定程度上可以确保应用的安全性,通过对本文的学习可以为开发者提供指导意义。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674f43e8e884a3e30f2d1a52