Angular 如何实现 JWT 授权认证

阅读时长 6 分钟读完

在前端开发中,身份认证和授权是非常重要的一环。Angular是一款流行的前端框架,它提供了丰富的工具和组件,可以方便地实现 JWT 授权认证,保障应用的安全性。

什么是 JWT 授权认证

JSON Web Token(JWT)是一种开放标准,定义了一种紧凑且独立的方式,用于在各方之间作为 JSON 对象安全地传输信息。它可以用于身份认证和授权,能够让用户安全地使用网站或应用程序。

JWT 授权认证一般包括以下过程:

  1. 用户在登录页面输入用户名和密码。
  2. 服务端验证用户身份,成功后生成并返回一个带有有效期的 JWT。
  3. 前端获取 JWT,并保存到本地存储或 cookie 中。
  4. 后续的每个 HTTP 请求都需要在请求头中添加 JWT。
  5. 服务器验证 JWT 的有效性,如果验证通过则返回结果,否则拒绝访问。

JWT 授权认证的主要优点是令牌可以在不使用后端存储的情况下安全地传输,可以减轻服务器的压力,提高应用的可扩展性和性能。

在 Angular 中实现 JWT 授权认证

Angular 提供了丰富的组件和服务,可以方便地实现 JWT 授权认证。下面我们将分步骤介绍如何实现 JWT 授权认证。

1. 安装依赖

@auth0/angular-jwt 是一个 Angular 插件,用于管理 JWT 令牌。它包含从 JWT 解码器到授权助手等各种服务。

2. 生成 JWT

在后端服务中,可以使用 jsonwebtoken 库生成 JWT。生成 JWT 需要指定一个密钥和有效期,示例代码如下:

-- -------------------- ---- -------
----- --- - ------------------------

----- ------- - -
  --- --
  --------- --------
  ------ -----------------
--

----- ------- - -
  ---------- --------
  ---------- ----
--

----- ----- - ----------------- --------- ---------

上面代码中,payload 是要加密的数据,options 是配置选项,jwt.sign 方法用密钥 secretpayload 进行加密,生成 JWT。

3. 发送 JWT

在前端应用中,可以使用 HttpClient 来发送 HTTP 请求,并在请求头中添加 JWT。

-- -------------------- ---- -------
------ - ----------- ----------- - ---- -----------------------
------ - ---------- - ---- ----------------
------ - ---------------- - ---- ---------------------

-------------
  ----------- ------
--
------ ----- ----------- -
  ------- ------- - -----------------------------

  ------------------- ----- ----------- ------- ---------- ----------------- --

  ------------------ ---- -
    ------ --------------------------------------- -------------
  -

  ----------------- -
    ----- ----- - ------------------------------

    ------ --------------------------------------
  -

  -------------- -
    ----- ----- - ------------------------------

    ------ --- -------------
      -------------- ------- ---------
    ---
  -

  --------- -
    ----- ------- - --------------------

    ------ ------------------------------------- - ------- ---
  -
-

上面代码中定义了一个 AuthService,其中包含 login 方法用于登录,isAuthenticated 方法用于判断用户是否已登录,getAuthToken 方法用于获取请求头,getData 方法用于获取数据。

其中关键部分是 getAuthToken 方法,它创建了一个 HttpHeaders 对象,将 JWT 添加到请求头中。

4. 验证 JWT

服务端需要验证 JWT 是否有效。在 Express 中,可以使用 express-jwt 中间件来验证 JWT。

-- -------------------- ---- -------
----- --- - -----------------------
----- ------- - --------------------

----- -------------- - -----
  ------- --------------------------
    ------ -----
    ---------- -----
    ---------------------- --
    -------- -----------------------------------------------------
  ---
  --------- ------------------------
  ------- ---------------------------------
  ----------- ---------
---

--------------- --------------- ----- ---- -- -
  -------------------------------
---

上面代码中,通过 jwksRsa.expressJwtSecret 方法创建了一个 JWT 密钥,用于验证 JWT 的有效性,audienceissuer 是特定于应用的参数,algorithms 是 JWT 使用的加密算法。

authMiddleware 是通过 jwt 函数创建的中间件,用于验证 JWT 是否有效。在路由中通过 authMiddleware 方法来验证 JWT,如果 JWT 有效,则返回数据。

总结

JWT 授权认证是一种很好的身份认证方式,可以大大提高应用的安全性和可扩展性。在 Angular 中实现 JWT 授权认证可以使用 @auth0/angular-jwt 插件来处理 JWT,其具有良好的可读性和维护性。

希望本文能够对你学习和实践 Angular 中的 JWT 授权认证提供帮助和指导。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646c131e968c7c53b0b22f88

纠错
反馈