在没有库的情况下生成租户令牌是可能的,但不推荐。本指南总结了必要的步骤。

完整过程需要您创建令牌头、准备包含至少一组搜索规则的数据载荷,然后使用 API 密钥对令牌进行签名。

准备令牌头

令牌头必须指定 JWT 类型和加密算法。支持的租户令牌加密算法有 HS256HS384HS512

{
  "alg": "HS256",
  "typ": "JWT"
}

构建令牌载荷

首先,创建一组搜索规则

{
  "INDEX_NAME": {
    "filter": "ATTRIBUTE = VALUE"
  }
}

接下来,找到您的默认搜索 API 密钥。查询 获取 API 密钥端点 并检查 uid 字段以获取您的 API 密钥的 UID

curl \
  -X GET 'MEILISEARCH_URL/keys/API_KEY' \
  -H 'Authorization: Bearer MASTER_KEY'

为了最大程度的安全,您还应该为租户令牌设置一个有效期。以下 Node.js 示例配置令牌在创建后 20 分钟过期

parseInt(Date.now() / 1000) + 20 * 60

最后,将载荷的所有部分组装到一个对象中

{
  "exp": UNIX_TIMESTAMP,
  "apiKeyUid": "API_KEY_UID",
  "searchRules": {
    "INDEX_NAME": {
      "filter": "ATTRIBUTE = VALUE"
    }
  }
}

有关每个载荷字段要求的更多信息,请查阅 令牌载荷参考

编码头部和载荷

然后,您必须将头部和载荷都编码为 base64,将它们连接起来,然后使用您选择的加密算法签名以生成令牌。

使用租户令牌发起搜索请求

签名令牌后,您可以像使用 API 密钥一样使用它进行搜索查询。

curl \
  -X POST 'MEILISEARCH_URL/indexes/patient_medical_records/search' \
  -H 'Authorization: Bearer TENANT_TOKEN'