Angular 项目中集成 JWT 认证

在现代应用程序中,安全性往往是至关重要的。JWT (JSON Web Token) 是一种常见的身份验证策略,其在 Web 应用程序中的使用也越来越广泛。Angular 是一个流行的前端框架,可以轻松地在应用程序中集成 JWT 认证。

在本文中,我们将探讨如何在 Angular 项目中使用 JWT 认证。我们将讨论 JWT 的原理、如何将其集成到 Angular 项目中以及如何使用它来保护我们的应用程序。

JWT 的原理

JWT 是一个开放标准 (RFC 7519),它定义了一种紧凑的、自包含的方式,用于在各方之间作为 JSON 对象安全地传输信息。JWT 通常由三部分组成,即:头部、载荷和签名。头部和载荷都是基于 JSON 的,签名是通过使用密钥和一些哈希算法计算得出的。

头部包含有关所使用算法的信息。载荷包含一些关于用户、访问权限和其他有用信息的称为声明的键值对。签名可以验证 JWT 是否有效,在传输过程中是否被篡改。使用 JWT 时,你可以将数据存储在其中,例如身份验证信息、访问令牌等信息。

在 Angular 项目中集成 JWT 认证

在 Angular 项目中使用 JWT 分为以下几个步骤:

1. 安装 JwtInterceptor

可以使用 Angular 官方提供的 @auth0/angular-jwt包,该包包含一个可用于拦截 http 请求的 JwtInterceptor。

首先,通过 npm 安装 @auth0/angular-jwt:

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

2. 创建一个 Interceptor

创建名为 JwtInterceptor 的新拦截器。在此拦截器中,我们将检查当前用户是否已登录,并且将其 JWT 添加到每个 HTTP 请求的头部。

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

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

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

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

-

3. 注册 Interceptor

在 app.module.ts 文件中,注册 JwtInterceptor:

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

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

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

4. 将 token 保存到本地存储中

要将 token 保存到本地存储中,可以使用以下代码:

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

5. 从本地存储中删除 token

要从本地存储中删除 token,可以使用以下代码:

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

使用 JWT 保护应用程序

使用 JWT 可以轻松地保护 Angular 应用程序。可以将它嵌入到路由守卫或身份验证服务中,以确保用户访问受保护的视图或功能时必须进行身份验证。

下面是一个简单的示例,演示如何在路由守卫中使用 JWT:

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

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

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

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

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

在上面的示例中,AuthGuard 是一个可注入的 AuthGuard 服务,在路由定义中使用 canActivate 方法。

结论

JWT 是一种安全、紧凑且自包含的身份验证策略,在 Web 应用程序中的使用越来越广泛。使用 @auth0/angular-jwt 包,可以轻松地将 JWT 集成到 Angular 项目中,并使用路由守卫等方式来保护我们的应用程序免受未经授权的访问。

上面的示例代码只是一个概念性的示例,实际使用中应该结合实际业务需求进行实践。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6714cf55ad1e889fe215e593