保护您的项目

    本教程将向您展示如何保护您的 Meilisearch 项目。您将了解如何管理主密钥以及如何使用 API 密钥安全地向 Meilisearch API 发送请求。

    创建主密钥

    主密钥是保护 Meilisearch 项目的第一步,也是最重要的一步。

    在 Meilisearch Cloud 中创建主密钥

    Meilisearch Cloud 会为每个项目自动生成一个主密钥。这意味着 Meilisearch Cloud 项目默认是安全的。

    您可以通过访问项目概述来查看您的主密钥

    An interface element named "API keys" showing three obscured keys: "Master key", "Default Search API Key", and "Default Admin API Key"

    在自托管实例中创建主密钥

    要保护您的自托管实例,请使用 `--master-key` 命令行选项或 `MEILI_MASTER_KEY` 环境变量重新启动它

    ./meilisearch --master-key="MASTER_KEY"
    
    生成主密钥的工具

    主密钥必须至少 16 字节长,并且由有效的 UTF-8 字符组成。使用以下工具之一生成安全的密钥

    Meilisearch 将照常启动。启动日志应包含一条消息,通知您实例已受到保护

    A master key has been set. Requests to Meilisearch won't be authorized unless you provide an authentication key.
    

    如果您提供了不安全的密钥,Meilisearch 将显示警告并建议您使用自动生成的替代密钥重新启动实例

    We generated a new secure master key for you (you can safely use this token):
    
    >> --master-key E8H-DDQUGhZhFWhTq263Ohd80UErhFmLIFnlQK81oeQ <<
    
    Restart Meilisearch with the argument above to use this new and secure master key.
    

    获取 API 密钥

    当您的项目受到保护时,Meilisearch 会自动生成两个 API 密钥:`默认搜索 API 密钥` 和 `默认管理员 API 密钥`。API 密钥是旨在安全地与 Meilisearch API 通信的授权令牌。

    在 Meilisearch Cloud 中获取 API 密钥

    您可以在之前找到主密钥的同一部分找到您的 API 密钥

    An interface element named "API keys" showing three obscured keys: "Master key", "Default Search API Key", and "Default Admin API Key"

    在自托管实例中获取 API 密钥

    使用您的主密钥查询 `/keys` 端点以查看实例中的所有 API 密钥

    curl -X GET 'http://127.0.0.1:7700/keys' \
    -H 'Authorization: Bearer MASTER_KEY'
    不要将主密钥用于 API 请求

    仅使用主密钥来管理 API 密钥。切勿使用主密钥执行搜索或其他常见操作。

    Meilisearch 的响应将至少包含这两个默认 API 密钥

    {
      "results": [
        {
          "name": "Default Search API Key",
          "description": "Use it to search from the frontend",
          "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": "Use it for anything that is not a search operation. Caution! Do not expose it on a public frontend",
          "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 密钥添加到请求中。

    使用 `默认管理员 API 密钥` 执行敏感操作,例如创建新索引

    curl \
      -X POST 'http://127.0.0.1:7700/indexes' \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer DEFAULT_ADMIN_API_KEY' \
      --data-binary '{
        "uid": "medical_records",
        "primaryKey": "id"
      }'

    然后使用 `默认搜索 API 密钥` 在您刚刚创建的索引中执行搜索操作

    curl \
      -X POST 'http://127.0.0.1:7700/indexes/medical_records/search' \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer DEFAULT_SEARCH_API_KEY' \
      --data-binary '{ "q": "appointments" }'

    结论

    您已通过配置主密钥成功保护了 Meilisearch。然后,您了解了如何通过将 API 密钥添加到请求的授权标头来访问 Meilisearch API。