本教程将向您展示如何保护您的 Meilisearch 项目。您将学习如何管理主密钥以及如何使用 API 密钥安全地向 Meilisearch API 发送请求。
创建主密钥
主密钥是保护 Meilisearch 项目的第一步,也是最重要的一步。
在 Meilisearch Cloud 中创建主密钥
Meilisearch Cloud 会自动为每个项目生成主密钥。这意味着 Meilisearch Cloud 项目默认就是安全的。
您可以通过访问项目概览查看主密钥:
在自托管实例中创建主密钥
为了保护您的自托管实例,请使用 --master-key
命令行选项或 MEILI_MASTER_KEY
环境变量重新启动实例:
主密钥长度必须至少为16字节,且由有效的UTF-8字符组成。可以使用以下工具之一生成安全的主密钥:
Meilisearch 将正常启动。启动日志中会包含一条消息,提示您实例已受保护:
已设置主密钥。除非提供认证密钥,否则对Meilisearch的请求将不被授权。
如果您提供了不安全的密钥,Meilisearch 会显示警告并建议您使用自动生成的替代密钥重新启动实例:
我们为您生成了一个新的安全主密钥(您可以安全使用此令牌):
>> --master-key E8H-DDQUGhZhFWhTq263Ohd80UErhFmLIFnlQK81oeQ <<
使用上述参数重新启动Meilisearch以使用这个新的安全主密钥。
获取API密钥
当您的项目受保护时,Meilisearch 会自动生成两个API密钥:Default Search API Key
(默认搜索API密钥)和 Default Admin API Key
(默认管理API密钥)。API密钥是用于安全与Meilisearch API通信的授权令牌。
在 Meilisearch Cloud 中获取 API 密钥
您可以在之前找到主密钥的相同位置找到 API 密钥:
在自托管实例中获取 API 密钥
使用您的主密钥查询 /keys
端点来查看实例中的所有 API 密钥:
curl -X GET 'MEILISEARCH_URL/keys' \
-H 'Authorization: Bearer MASTER_KEY'
仅使用主密钥来管理 API 密钥。切勿使用主密钥执行搜索或其他常规操作。
Meilisearch 的响应将至少包含两个默认 API 密钥:
{
"results": [
{
"name": "Default Search API Key",
"description": "用于从前端执行搜索",
"key": "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33",
"uid": "123-345-456-987-abc",
"actions": [
"search"
],
"indexes": [
"*"
],
"expiresAt": null,
"createdAt": "2024-01-25T16:19:53.949636Z",
"updatedAt": "2024-01-25T16:19:53.949636Z"
},
{
"name": "Default Admin API Key",
"description": "用于执行非搜索操作。注意!不要将其暴露在公共前端",
"key": "62cdb7020ff920e5aa642c3d4066950dd1f01f4d",
"uid": "123-345-456-987-abc",
"actions": [
"*"
],
"indexes": [
"*"
],
"expiresAt": null,
"createdAt": "2024-01-25T16:19:53.94816Z",
"updatedAt": "2024-01-25T16:19:53.94816Z"
}
],
…
}
向 Meilisearch 发送安全的 API 请求
现在您已经获得了 API 密钥,可以安全地查询 Meilisearch API。通过 Authorization
承载令牌头来在请求中添加 API 密钥。
使用 Default Admin API Key
执行敏感操作,例如创建新索引:
curl \
-X POST 'MEILISEARCH_URL/indexes' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer DEFAULT_ADMIN_API_KEY' \
--data-binary '{
"uid": "medical_records",
"primaryKey": "id"
}'
然后使用 Default Search API Key
在刚创建的索引中执行搜索操作:
curl \
-X POST 'MEILISEARCH_URL/indexes/medical_records/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer DEFAULT_SEARCH_API_KEY' \
--data-binary '{ "q": "appointments" }'
您已成功通过配置主密钥来保护 Meilisearch 的安全。随后您还了解了如何通过在请求的授权头中添加 API 密钥来访问 Meilisearch API。