租户令牌负载参考
Meilisearch 的租户令牌是 JSON Web 令牌 (JWTs),其负载由三个元素组成:搜索规则、API 密钥 UID 和可选的过期日期。
Meilisearch 的租户令牌是 JSON Web Tokens (JWTs)。其负载由三个元素组成:搜索规则、API 密钥 UID 和可选的过期日期。
示例负载
搜索规则
搜索规则对象是一组指令,定义了 Meilisearch 在使用特定租户令牌进行查询时将强制执行的搜索参数。
搜索规则对象
searchRules
必须是一个 JSON 对象。每个键必须对应一个或多个索引:
每个搜索规则对象可以包含一个 filter
键。这个 filter
的值必须是一个过滤表达式:
Meilisearch 会将过滤器应用于使用该租户令牌进行的所有搜索。令牌只能访问 searchRules
对象中存在的索引。
一个令牌可以包含任意数量索引的规则。特定规则集优先并覆盖 *
规则。
由于租户令牌是在您的应用程序中生成的,Meilisearch 无法检查搜索规则过滤器是否有效。无效的搜索规则在搜索时会返回错误。
有关 Meilisearch 过滤器语法的更多信息,请查阅搜索 API 参考文档/reference/api/search#filter。
搜索规则也可以是一个空对象。这种情况下,租户令牌将可以访问索引中的所有文档:
示例
单一过滤器
在此示例中,用户将只能获取 user_id
等于 1
的 medical_records
文档:
多重过滤器
在此示例中,用户将只能获取 user_id
等于 1
且 published
字段为 true
的 medical_records
文档:
授予对索引中所有文档的访问权限
在此示例中,用户可以访问 medical_records
中的所有文档:
使用部分通配符匹配多个索引
在此示例中,用户将获取任何以 medical
开头的索引中的文档。这包括诸如 medical_records
和 medical_patents
等索引:
使用通配符匹配所有索引
在此示例中,用户将获取整个实例中任何索引的文档:
手动指定多个索引
在此示例中,用户对所有索引(除一个外)中 user_id = 1
的文档都有访问权限。当查询 medical_records
时,用户只能访问已发布的文档:
API key UID(API密钥唯一标识符)
租户令牌(tenant token)的有效载荷中必须包含用于验证请求的 API key UID。UID 是一个用于标识 API 密钥的字母数字字符串:
可以通过查询获取单个API密钥端点来获取 API key 的 UID。
该 UID 必须指向具有搜索操作权限的 API 密钥。生成的令牌将拥有与用于创建它的 API 密钥相同的索引和路由访问权限。
由于主密钥(master key)不是 API 密钥,因此不能使用主密钥来创建租户令牌。请避免暴露 API 密钥,始终在应用程序的后端生成令牌。
如果 API 密钥过期,所有使用它创建的租户令牌都将失效。如果 API 密钥被删除或因主密钥变更而被重新生成,同样会导致相关令牌失效。
过期时间
过期时间必须是一个 UNIX 时间戳或设为 null
:
令牌的过期时间不能超过其父 API 密钥的过期时间。
设置令牌过期时间是可选的,但强烈建议这样做。没有过期时间的令牌将无限期有效,可能会带来安全隐患。
对于没有过期时间的令牌,唯一使其失效的方法是删除其父 API 密钥。
更改实例的主密钥会强制 Meilisearch 重新生成所有 API 密钥,同时也会使所有现有的租户令牌失效。