不借助库直接生成租户令牌是可行的,但不推荐。本指南概述了必要的步骤。

完整流程需要创建令牌头部、准备包含至少一组搜索规则的数据载荷,然后使用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'