跳至主要内容
版本:v2.x

加密 Cookie

加密 Cookie 是 Fiber 的一个中间件,它通过加密保护你的 cookie 值。

注意

此中间件加密 cookie 值,而不是 cookie 名称。

签名

// Intitializes the middleware
func New(config ...Config) fiber.Handler

// Returns a random 32 character long string
func GenerateKey() string

示例

要使用 Encrypt Cookie 中间件,首先,将中间件包作为 Fiber Web 框架的一部分导入

import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/encryptcookie"
)

导入中间件包后,你可以在 Fiber 应用程序中使用它

// Provide a minimal configuration
app.Use(encryptcookie.New(encryptcookie.Config{
Key: "secret-thirty-2-character-string",
}))

// Retrieve the encrypted cookie value
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("value=" + c.Cookies("test"))
})

// Create an encrypted cookie
app.Post("/", func(c *fiber.Ctx) error {
c.Cookie(&fiber.Cookie{
Name: "test",
Value: "SomeThing",
})
return nil
})
注意

Key 必须是一个 32 个字符的字符串。它用于加密值,因此请确保它是随机的并保密。你可以运行 openssl rand -base64 32 或调用 encryptcookie.GenerateKey() 为你创建一个随机密钥。确保不要将 Key 设置为 encryptcookie.GenerateKey(),因为这会在每次运行时创建一个新密钥。

配置

属性类型描述默认值
下一步func(*fiber.Ctx) bool当返回 true 时,跳过此中间件的函数。nil
Except[]string不应加密的 Cookie 密钥数组。[]
Keystring用于对 Cookie 进行编码和解码的 base64 编码的唯一密钥。必需。密钥长度应为 32 个字符。(无默认值,必需字段)
Encryptorfunc(decryptedString, key string) (string, error)用于加密 Cookie 的自定义函数。EncryptCookie
Decryptorfunc(encryptedString, key string) (string, error)用于解密 Cookie 的自定义函数。DecryptCookie

默认配置

var ConfigDefault = Config{
Next: nil,
Except: []string{},
Key: "",
Encryptor: EncryptCookie,
Decryptor: DecryptCookie,
}

与读取或修改 Cookie 的其他中间件一起使用

将 encryptcookie 中间件放在任何其他读取或修改 Cookie 的中间件之前。例如,如果你正在使用 CSRF 中间件,请确保 encryptcookie 中间件放在它之前。否则,CSRF 中间件可能无法读取加密的 Cookie。

您还可以选择将某些 cookie 排除在加密之外。例如,如果您将 CSRF 中间件与 Angular 等前端框架一起使用,并且该框架从 cookie 中读取令牌,则应将该 cookie 排除在加密之外。可以通过在配置中的 Except 数组中添加 cookie 名称来实现此目的

app.Use(encryptcookie.New(encryptcookie.Config{
Key: "secret-thirty-2-character-string",
Except: []string{csrf.ConfigDefault.CookieName}, // exclude CSRF cookie
}))
app.Use(csrf.New(csrf.Config{
KeyLookup: "header:" + csrf.HeaderName,
CookieSameSite: "Lax",
CookieSecure: true,
CookieHTTPOnly: false,
}))