Koa 面试题 目录

Koa 的 app.keys 属性有什么作用?

推荐答案

app.keys 属性用于设置 Koa 应用程序的签名密钥数组。这些密钥用于对 cookie 进行签名,以确保 cookie 的完整性和安全性。Koa 使用这些密钥来生成和验证签名的 cookie,防止客户端篡改 cookie 数据。

本题详细解读

1. app.keys 的作用

app.keys 是一个数组,用于存储签名密钥。Koa 使用这些密钥来对 cookie 进行签名。签名后的 cookie 会在客户端存储时附加一个签名值,服务器在接收到 cookie 时可以通过验证签名来确保 cookie 未被篡改。

2. 如何使用 app.keys

你可以在 Koa 应用程序中通过以下方式设置 app.keys

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

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

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

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

在这个例子中,app.keys 被设置为一个包含三个密钥的数组。当使用 ctx.cookies.set 方法设置 cookie 时,如果 signed 选项为 true,Koa 会使用 app.keys 中的密钥对 cookie 进行签名。

3. 签名机制

Koa 使用 Keygrip 库来处理 cookie 签名。Keygrip 会根据 app.keys 数组中的密钥顺序,使用第一个密钥对 cookie 进行签名。如果客户端发送的 cookie 签名与服务器生成的签名不匹配,Koa 会认为该 cookie 已被篡改,并拒绝使用该 cookie。

4. 安全性考虑

  • 密钥轮换:你可以定期轮换 app.keys 中的密钥,以增强安全性。旧的密钥可以保留在数组中,以便验证之前签名的 cookie。
  • 密钥保密:确保 app.keys 中的密钥是保密的,不要将密钥硬编码在代码中或公开在版本控制系统中。

5. 示例代码

以下是一个完整的示例,展示了如何使用 app.keys 来设置和读取签名的 cookie:

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

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

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

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

在这个示例中,访问 /set 路径会设置一个签名的 cookie,访问 /get 路径会读取并验证该 cookie 的值。

纠错
反馈