meilisearch-go 租户 Token 教程:如何用 JWT 实现多租户搜索权限隔离 meilisearch-go 租户 Token 教程如何用 JWT 实现多租户搜索权限隔离【免费下载链接】meilisearch-goGolang wrapper for the Meilisearch API项目地址: https://gitcode.com/gh_mirrors/me/meilisearch-gomeilisearch-go 是 Meilisearch 官方的 Go 语言客户端而**租户 TokenTenant Token**正是它在多租户场景下提供的搜索权限隔离利器。本教程将带你从零掌握如何用 JWT 生成租户 Token让不同用户只能搜索到自己有权访问的数据——无需为每个租户单独建索引一套搜索后端轻松搞定权限控制。为什么需要多租户搜索权限隔离想象一个 SaaS 应用多租户共享一套数据比如电商平台里不同商家共用商品索引、文档系统里不同团队共用文档索引。如果所有用户都能搜到全部数据隐私就彻底失控了。传统方案要么为每个租户建独立索引索引爆炸、维护成本高要么每次搜索都手动拼接过滤条件容易漏写、权限难收敛。而Meilisearch 租户 Token把权限规则直接签进令牌里服务端自动执行过滤从根上解决这两个痛点。租户 Token 的核心原理JWT 签名 Meilisearch 的租户 Token 本质是一个JWTJSON Web Token由 SDK 用 API Key 作为密钥、以 HS256 算法签名生成。它包含两个关键字段字段作用apiKeyUid父级 API Key 的 UID标识令牌的权限来源searchRules搜索规则定义可访问的索引与过滤条件当客户端拿着租户 Token 发起搜索时Meilisearch 会校验签名 叠加 searchRules 过滤天然实现搜索权限隔离。在 meilisearch-go 中这一切封装在GenerateTenantToken一个方法里对应接口定义见 meilisearch_interface.go。准备工作搭建环境 ⚙️动手前先准备好两样东西安装依赖Go 1.21go get github.com/meilisearch/meilisearch-go想阅读源码或跑集成测试可以 clone 仓库到本地git clone https://gitcode.com/gh_mirrors/me/meilisearch-go准备 API Key通过客户端创建一个带search权限的 Key拿到它的UID和Key值Key 的 UID 是生成租户 Token 的必填参数格式要求为 UUID v4。创建 Key 的方法见 meilisearch.go。初始化客户端的标准写法client : meilisearch.New(http://localhost:7700, meilisearch.WithAPIKey(你的APIKey))快速上手三步生成租户 Token GenerateTenantToken接收三个参数apiKeyUIDAPI Key 的 UID、searchRules搜索规则、options可选配置。完整实现见 meilisearch.go。第一步编写 searchRulessearchRules : map[string]interface{}{ products: map[string]string{ filter: tenant_id 42, // 只允许搜索当前租户的数据 }, }第二步生成令牌apiKeyUID : 父级APIKey的UID token, err : client.GenerateTenantToken(apiKeyUID, searchRules, nil) if err ! nil { log.Fatal(err) } fmt.Println(token) // 一段 JWT 字符串第三步把令牌交给前端/客户端由它代替 API Key 发起搜索。前端拿到的永远只是受限的租户 Token主 Key 绝不泄露。searchRules 的两种玩法全局规则与索引级过滤 searchRules 非常灵活对应两种典型用法玩法一所有索引统一规则用*通配searchRules : map[string]interface{}{ *: map[string]string{ filter: tenant_id 42, }, }玩法二按索引精细化控制不同索引不同策略searchRules : map[string]interface{}{ products: map[string]string{ filter: tenant_id 42, }, reviews: map[string]string{ filter: owner_id 7, }, }对应测试用例可在 meilisearch_test.go 中查看覆盖了多索引过滤、单索引过滤等多种场景。进阶配置过期时间与指定签名密钥 ⏰GenerateTenantToken的第三个参数是*TenantTokenOptions结构定义见 types.go支持两个字段APIKey自定义签名密钥。不填则默认使用初始化客户端时的 API KeyExpiresAt令牌过期时间注意使用 UTC 时间到期后令牌自动失效。options : meilisearch.TenantTokenOptions{ APIKey: 用于签名的APIKey, ExpiresAt: time.Now().Add(24 * time.Hour).UTC(), } token, err : client.GenerateTenantToken(apiKeyUID, searchRules, options)给租户 Token 设置过期时间能让权限隔离更进一步——即使令牌泄露也会自动失效。常见报错与避坑指南 ️GenerateTenantToken内置了严格校验以下是高频报错原因对照表校验逻辑见 meilisearch.go报错场景原因与解决searchRules 为 nil搜索规则不能为空至少给一个空对象{}提示缺少 API Key既没在 options 里传APIKey客户端初始化时也没配 KeyapiKeyUid 格式错误必须是合法的 UUID v4 格式校验函数见 helper.goexpiresAt 过期过期时间必须晚于当前时间实战收尾用租户 Token 发起搜索 ✅生成令牌后用WithAPIKey传入令牌即可搜索示例见 examples/search/main.gosearchClient : meilisearch.New( http://localhost:7700, meilisearch.WithAPIKey(token), // 传入租户 Token ) result, err : searchClient.Index(products).Search(手机, meilisearch.SearchRequest{})Meilisearch 会自动在products索引上叠加tenant_id 42过滤返回结果天然只属于该租户权限隔离即刻生效。小结 通过 meilisearch-go 的GenerateTenantToken只需几行代码就能基于 JWT 实现强大的多租户搜索权限隔离一套索引、一套后端却能按租户精准投放搜索结果。配合过期时间与索引级过滤规则足以应对绝大多数 SaaS 权限场景。现在就动手试试让你的搜索服务安全又优雅【免费下载链接】meilisearch-goGolang wrapper for the Meilisearch API项目地址: https://gitcode.com/gh_mirrors/me/meilisearch-go创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

最新新闻

触摸芯片技术解析:从电容感应原理到抗干扰设计实战

触摸芯片技术解析:从电容感应原理到抗干扰设计实战

1. 从“按下去”到“摸一下”:触摸芯片的底层逻辑与演进十几年前,我们还在用着带物理按键的手机,每一次操作都伴随着“咔哒”一声清脆的反馈。如今,从手机、平板到汽车中控、智能家居面板,一块光滑的玻璃表面承载了我们…

2026/8/19 21:30:19
DC/DC变换器核心原理与Buck电路设计实战解析

DC/DC变换器核心原理与Buck电路设计实战解析

1. 从“DC/DC”这个词说起:它到底是什么意思? 如果你刚接触电源设计,或者在看一些芯片的规格书,大概率会碰到“DC/DC”这个词。它听起来像个缩写,也确实是个缩写,全称是 Direct Current to Direct Current…

2026/8/19 21:30:19
OpenLane-V2 数据集完整教程:下载、预处理与目录结构一次搞懂

OpenLane-V2 数据集完整教程:下载、预处理与目录结构一次搞懂

OpenLane-V2 数据集完整教程:下载、预处理与目录结构一次搞懂 【免费下载链接】OpenLane-V2 [NeurIPS 2023 Track Datasets and Benchmarks] OpenLane-V2: The First Perception and Reasoning Benchmark for Road Driving 项目地址: https://gitcode.com/gh_mirr…

2026/8/19 21:30:19
AMD EPYC与Intel Xeon架构对决:小芯片设计如何重塑数据中心处理器格局

AMD EPYC与Intel Xeon架构对决:小芯片设计如何重塑数据中心处理器格局

1. 一个时代的转折点:从“牙膏厂”到“追赶者”最近,行业里一个老生常谈但分量极重的话题又被摆上了台面:Intel在数据中心处理器市场,正面临来自AMD前所未有的、堪称严峻的挑战。这已经不是分析师报告里的预测,而是Int…

2026/8/19 21:30:19
涂伊维菌素乳膏后脸火辣辣地疼?如何提高皮肤耐受?

涂伊维菌素乳膏后脸火辣辣地疼?如何提高皮肤耐受?

伊维菌素乳膏为玫瑰痤疮患者带来了显著的疗效改善,但作为一种外用药物,它的局部刺激反应也需要患者了解。在两项关键的3期临床试验中,2047名患者接受了伊维菌素乳膏治疗,总体耐受性极佳。因不良反应停药的比例在两项研究中分别为1…

2026/8/19 21:30:19
Axure RP动效设计:从缓动曲线到交互序列的丝滑实现

Axure RP动效设计:从缓动曲线到交互序列的丝滑实现

这类工具最值得先看的不是功能列表,而是能不能在普通环境里稳定跑起来。Axure RP 作为产品经理和交互设计师的核心工具,很多人用它画线框图,但真正能做出流畅、有说服力动效的人不多。一个“丝滑”的展示动效,关键不在于用了多少复…

2026/8/19 21:25:18