随着单页应用(SPA)的流行,前端应用的访问控制变得越来越重要。在传统的多页应用中,应用的访问控制主要由服务器控制,通过 session 或 cookie 等机制实现。但是在 SPA 中,前端应用与服务器之间的交互更多地依赖于 API,因此需要一种在前端实现访问控制的机制。本文将介绍如何使用 Token 验证实现 SPA 应用的访问控制。
Token 验证
Token 验证是一种基于令牌的认证方式,它将用户的身份信息存储在 Token 中,并将 Token 发送给服务器进行验证。在 SPA 中,Token 验证通常通过以下步骤实现:
- 用户在登录页面输入用户名和密码,前端应用将用户名和密码发送给服务器进行验证。
- 如果验证成功,服务器会生成一个 Token,并将 Token 发送给前端应用。
- 前端应用将 Token 存储在本地,例如使用 localStorage 或 sessionStorage。
- 在后续的请求中,前端应用将 Token 发送给服务器进行验证。服务器可以根据 Token 中的信息判断用户是否有权限访问该资源。
实现步骤
1. 登录
在登录页面,用户输入用户名和密码,并将其发送给服务器进行验证。如果验证成功,服务器会生成一个 Token,并将其返回给前端应用。
-- -------------------- ---- -------
----- ----- - ----- ---------- --------- -- -
----- -------- - ----- ------------------- -
------- -------
-------- -
--------------- -------------------
--
----- ---------------- --------- -------- ---
---
-- ------------- -
----- - ----- - - ----- ----------------
----------------------------- -------
------ -----
- ---- -
------ ------
-
--2. 发送请求
在后续的请求中,前端应用需要将 Token 发送给服务器进行验证。可以在请求的 header 中添加 Authorization 字段,将 Token 以 Bearer Token 的方式发送给服务器。
-- -------------------- ---- -------
----- ------- - ----- -- -- -
----- ----- - ------------------------------
----- -------- - ----- ------------------ -
-------- -
-------------- ------- ----------
--
---
-- ------------- -
----- ---- - ----- ----------------
------ -----
- ---- -
----- --- ----------------------
-
--3. 验证 Token
在服务器端,需要对 Token 进行验证。可以使用 jsonwebtoken 库进行 Token 的解析和验证。
-- -------------------- ---- -------
----- --- - ------------------------
----- ------------ - ----- ---- ----- -- -
----- ---------- - --------------------------
-- ------------ -
----- ----- - ------------------ ------
----------------- ----------------------- ----- ----- -- -
-- ----- -
------ --------------------
-
-------- - -----
-------
---
- ---- -
--------------------
-
--这里使用了 JWT_SECRET 环境变量来存储 JWT 的加密密钥,需要在服务器端设置该环境变量。
4. 登出
在用户登出时,需要清除本地存储的 Token。
const logout = () => {
localStorage.removeItem('token');
};指导意义
使用 Token 验证实现 SPA 应用的访问控制,可以将身份验证的责任转移到前端,减轻服务器的负担,并提高应用的性能和安全性。同时,Token 验证也可以与其他认证方式结合使用,例如 OAuth2 等。在实际项目中,应根据具体情况选择合适的认证方式,并对 Token 的安全性进行评估和防范。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/67d3b117a941bf71347083f9