不使用库生成租户令牌
不使用库生成租户令牌是可能的,但不建议这样做。本指南总结了必要的步骤。
完整的过程需要您创建一个令牌头,准备包含至少一组搜索规则的数据负载,然后使用 API 密钥对令牌进行签名。
准备令牌头
令牌头必须指定 JWT 类型和加密算法。支持的租户令牌加密算法为 HS256、HS384 和 HS512。
{
"alg": "HS256",
"typ": "JWT"
}
构建令牌负载
首先,创建一组搜索规则
{
"INDEX_NAME": {
"filter": "ATTRIBUTE = VALUE"
}
}
接下来,找到您的默认搜索 API 密钥。查询 get an API key 端点 并检查 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'