当前位置: 首页 > news >正文

使用 go-redis-entraid 实现 Entra ID 无密钥认证

1、依赖与安装

步骤命令说明
安装(或升级) go-redis v9.9+go get github.com/redis/go-redis/v9@latestentraid 必须 ≥ 9.9.0
安装 go-redis-entraidgo get github.com/redis/go-redis-entraid自动拉取 transit 依赖

2、认证方式一览

方式说明创建 StreamingCredentialsProvider 工厂函数
服务主体 (Service Principal)适合 CI/CD、后台任务entraid.NewConfidentialCredentialsProvider
系统分配托管身份 (System-Assigned MI)VM / App Service 自动生成entraid.NewManagedIdentityCredentialsProvider
用户分配托管身份 (User-Assigned MI)可跨资源共享,同一 client ID同上,ManagedIdentityType: identity.UserAssignedObjectID

⚠️ 重要字段对照表

字段在 Azure 门户/CLI 对应
ClientID应用(服务主体) / 托管身份的客户端 ID
ClientSecret应用机密 (仅服务主体)
TenantIDEntra ID 租户 ID,common=多租户
UserAssignedObjectID用户分配身份的对象 ID

3、最小可运行示例(系统分配托管身份)

package mainimport ("context""log""os""github.com/redis-developer/go-redis-entraid/entraid""github.com/redis-developer/go-redis-entraid/identity""github.com/redis/go-redis/v9"
)func main() {endpoint := os.Getenv("REDIS_ENDPOINT") // 例: "<host>:6380"if endpoint == "" {log.Fatal("请设置 REDIS_ENDPOINT 环境变量")}// 1) 生成凭据提供器provider, err := entraid.NewManagedIdentityCredentialsProvider(entraid.ManagedIdentityCredentialsProviderOptions{ManagedIdentityProviderOptions: identity.ManagedIdentityProviderOptions{ManagedIdentityType: identity.SystemAssignedIdentity,},})if err != nil {log.Fatalf("创建凭据提供器失败: %v", err)}// 2) 创建 Redis 客户端(TLS 建议保持默认 6380)rdb := redis.NewClient(&redis.Options{Addr:                       endpoint,StreamingCredentialsProvider: provider,})defer rdb.Close()// 3) 测试连接if err := rdb.Ping(context.Background()).Err(); err != nil {log.Fatalf("连接 Redis 失败: %v", err)}log.Println("Azure Managed Redis 连接成功!")
}

4、自定义刷新与重试策略

options := entraid.CredentialsProviderOptions{TokenManagerOptions: manager.TokenManagerOptions{ExpirationRefreshRatio: 0.7,  // token 生命周期过 70% 就开始刷新LowerRefreshBounds:     10_000, // 最少剩余 10s 仍会强制刷新RetryOptions: manager.RetryOptions{MaxAttempts:      3,InitialDelay:     1 * time.Second,BackoffMultiplier: 2.0,IsRetryable: func(err error) bool {return strings.Contains(err.Error(), "network") ||strings.Contains(err.Error(), "timeout")},},},
}
provider, _ := entraid.NewManagedIdentityCredentialsProvider(entraid.ManagedIdentityCredentialsProviderOptions{CredentialsProviderOptions:  options,ManagedIdentityProviderOptions: identity.ManagedIdentityProviderOptions{ManagedIdentityType: identity.UserAssignedObjectID,UserAssignedObjectID: "<client-id>",},},
)

5、常见坑与调试

症状排查步骤
ERR invalid username or password确认 AMR 实例已启用 Entra ID 认证,且 AAD 角色已赋值 (Cache Contributor/Access 等)。
证书握手失败连接端口 6380 需 TLS;如本地测试可开启 DisableTLS (不建议生产)。
token 过期,自动刷新失败检查托管身份有无 Azure Redis Cache Contributor 角色;或自定义 RetryOptions
使用服务主体 but 权限不足记得把 SP 用 az redis identity assign 绑定,并授予 RBAC 角色。
User-Assigned MI 无法获取 tokenManagedIdentityType 与传入字段需匹配 (UserAssignedObjectID / UserAssignedClientID)。

6、参考链接

  • GitHub ▸ https://github.com/redis-developer/go-redis-entraid
  • 官方文档 ▸ Azure Cache for Redis – Microsoft Entra ID authentication
  • 示例 CLI ▸ az redis identity assignaz ad sp create-for-rbac

小结

  1. 选身份:服务主体适合脚本 & CI;托管身份零密钥更安全。
  2. 三步走:创建 CredentialsProvider → NewClient 注入 → Ping 验证。
  3. 生产必配RetryOptions & ExpirationRefreshRatio,及时刷新 token。

按照以上说明即可安全、优雅地在 Go 项目中连接 Azure Managed Redis,享受 Entra ID 带来的统一身份与密钥免维护体验。祝编码顺利 🚀

http://www.dtcms.com/a/287705.html

相关文章:

  • 一动一静皆消耗——IC设计之低功耗技术(Low Power Design)
  • javaweb的几大常见漏洞
  • ChatGPT Agent深度解析:告别单纯问答,一个指令搞定复杂任务?
  • mac 配置svn
  • 1Panel中的OpenResty使用alias
  • 《计算机网络》实验报告一 常用网络命令
  • 从 Server.xml 到字节码:Tomcat 内核全景与请求旅程 10 000 字深剖
  • 泛型机制详解
  • 2.4 组件间通信Props(父传子)
  • Java SE 讨论String类
  • GATE:基于移动嵌入式设备的实时边缘构建图注意力神经网络用于鲁棒室内定位
  • C++命名空间深度解析:避免命名冲突的终极解决方案
  • HTTPHTTPSTLSDNSRSA
  • LVS四种工作模式深度解析
  • ENSP路由综合实验 + 思科(cisco)/华为(ensp)链路聚合实验
  • Vite的优缺点(精简版)
  • Java大视界:Java大数据在智能医疗电子健康档案数据挖掘与健康服务创新>
  • lvs笔记
  • RabbitMQ面试精讲 Day 3:Exchange类型与路由策略详解
  • Arc虚拟细胞挑战入门指南
  • OpenCV 官翻5 - 机器学习
  • 实战AI关键词SEO核心技巧高效应用
  • python学智能算法(二十五)|SVM-拉格朗日乘数法理解
  • 7.19 Java基础 | 异常
  • OpenCV 官翻 4 - 相机标定与三维重建
  • [spring6: AspectJAdvisorFactory AspectJProxyFactory]-源码解析
  • 基于 OpenCV 的 Haar 级联人脸检测模型对比研究 —— 以典型应用场景验证为例 毕业论文——仙盟创梦IDE
  • 智能光电检测:YOLO+OpenCV联合算法工程实践
  • Spring Boot入门
  • NJU 凸优化导论(9) 对偶(II)KKT条件+变形重构