如何为 RESTful API 应用添加身份验证

在现代应用程序中,使用RESTful API成为了前端开发人员的一种常见方式。然而,对于涉及用户个人信息或需要访问授权的API,尽管HTTPS已经为网络安全做出巨大贡献,但我们还需要进一步的安全措施:身份验证。

在本篇文章中,我们将详细讨论如何为RESTful API添加身份验证机制,以保证应用程序的安全性和隐私性。

什么是身份验证?

身份验证是一种安全性措施,它旨在验证用户的身份,并确保请求者有权访问该API的资源。一般而言,身份验证是通过在请求(通常是HTTP头信息)中包含认证令牌或凭证等信息完成的。

常用的身份验证方式

在RESTful API中,有多种身份验证方式可供选择。下面是一些常用的:

  • JSON Web Tokens(JWT):JWT是一种轻量级的令牌,占用的空间较小,并且易于使用。它是一个包含声明的JSON,通常用于身份验证和授权。
  • Http Only Cookie:一个cookie可以存储用户身份验证信息。在这种情况下,客户端将在请求头中包含HTTP Cookie标头,该标头与存储在服务器上的cookie相关联。
  • OAuth2:OAuth2是一种授权框架,它允许第三方应用程序访问受保护的资源。在OAuth2中,有两个主要的角色:客户端和资源服务器。客户端向授权服务器进行身份验证,并获取令牌,然后使用令牌访问受保护的API。

在应用程序中实现身份验证

设置身份验证

为了在应用程序中实现身份验证,您需要使用将授权拉入应用程序的中间件。让我们来看看如何使用Node.js和Express框架来实现身份验证。

首先,您需要安装几个所需的模块:

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

在Node.js应用程序中,中间件是一组函数,这些函数依次执行HTTP请求和响应对象。许多开源的受欢迎的中间件用于Node.js,帮助我们实现各种功能。JSON Web Tokens(JWT)中间件可以轻松地将JWT集成到您的应用程序中。

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

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

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

上面的代码设置了Express应用程序和morgan日志记录中间件。接下来,我们需要集成JSON Web Tokens(JWT)。

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

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

创建身份验证令牌

使用JWT Node.js包可以很容易地生成身份验证令牌。要生成JWT,请使用以下代码。

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

此代码中的第一个参数是有效负载对象,它可以包含用户的任何数据。第二个参数是您的应用程序的私钥,并且第三个参数是指定该令牌何时过期的选项。

身份验证

现在您已经生成了身份验证令牌,您需要检查请求是否包含身份验证标头以及该标头是否包含有效的JWT。在Express中,可以使用中间件实现这一点。

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

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

这是一个中间件函数,它检查HTTP请求中是否包含一个名为“jwt”的cookie,并解码其中包含的JWT。如果JWT是有效的,我们将创建用户数据对象,并将其存储在Express请求对象中(req.userData)。否则,我们将返回401状态代码,并附带错误消息。

带有身份验证的API

现在我们已经完成了身份验证的设置,我们可以轻松地使用它来保护我们的API。在这里,我们将创建一个仅允许身份验证的路由。

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

完整代码示例

下面是如何为RESTful API应用程序添加身份验证的完整示例代码。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

当您在浏览器中访问以下URL时,您将需要进行身份验证:

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

结论

身份验证是保护RESTful API的关键步骤之一,它确保您的应用程序安全、可靠并防止钓鱼攻击。在本篇文章中,我们讨论了在Node.js应用程序中实现身份验证的过程,并提供了示例代码帮助您快速开始。希望您能够善用本文所述的技巧来加强您的RESTful API,提高您的应用程序的安全性和可靠性。

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