ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

免密连接 Azure Cache:StackExchange.Redis.Extensions 托管身份(Managed Identity)配置指南

免密连接 Azure Cache:StackExchange.Redis.Extensions 托管身份(Managed Identity)配置指南 免密连接 Azure CacheStackExchange.Redis.Extensions 托管身份Managed Identity配置指南【免费下载链接】StackExchange.Redis.ExtensionsStackExchange.Redis.Extensions is a library that extends StackExchange.Redis, making it easier to work with Redis in .NET applications项目地址: https://gitcode.com/gh_mirrors/st/StackExchange.Redis.ExtensionsStackExchange.Redis.Extensions 是一个 .NET Redis 扩展库提供对象序列化、连接池管理与高级 API。本文教你用Managed Identity托管身份实现 Azure Cache for Redis 免密连接告别硬编码密码只需一个异步回调即可完成配置。为什么要免密 硬编码密码的隐患传统方式把 Azure Cache 的连接密码写进appsettings.json或 CI 变量存在三个痛点痛点说明⚠️ 泄露风险密码长期有效配置一旦泄露需全量轮换⚠️ 维护成本密码过期、环境迁移都要手动更新⚠️ 审计困难无法区分谁在访问缓存启用Microsoft Entra ID 认证后应用改用短期令牌Token连接令牌自动轮换、权限可细粒度控制。准备清单2 个 NuGet 包 1 个缓存开关开始配置前请确认以下三项 ✅Azure Cache for Redis 已启用 Microsoft Entra ID 认证Azure 门户 → Identity你的应用引用这两个包注意扩展库本身不引用它们异步回调完全运行在你的代码中Microsoft.Azure.StackExchangeRedis—— 提供ConfigureForAzureWithTokenCredentialAsync扩展Azure.Identity—— 提供DefaultAzureCredential常规依赖StackExchange.Redis.Extensions.Core、StackExchange.Redis.Extensions.System.Text.Json、StackExchange.Redis.Extensions.AspNetCore核心原理一句话看懂异步回调机制免密的关键在于RedisConfiguration.ConfigurationOptionsAsyncHandler属性——一个在每条连接建立前被调用的异步回调。它的工作流程连接池管理器为每个池位默认 5 个由PoolSize控制克隆一份ConfigurationOptions避免共享状态被篡改回调中调用ConfigureForAzureWithTokenCredentialAsync向配置注入令牌凭据池管理器用配置好的选项执行ConnectAsync建立连接TLS 证书回调CertificateValidation、CertificateSelection在克隆过程中被完整保留相关源码位置回调属性定义src/core/StackExchange.Redis.Extensions.Core/Configuration/RedisConfiguration.cs克隆并调用回调的逻辑src/core/StackExchange.Redis.Extensions.Core/Implementations/RedisConnectionPoolManager.csEmitConnectionsAsync方法快速上手3 步完成托管身份连接第 1 步定义配置——指定主机、端口 6380TLS 端口、开启 SSLvar config new RedisConfiguration { Hosts new[] { new RedisHost { Host your-cache.redis.cache.windows.net, Port 6380 } }, Ssl true, IsDefault true };第 2 步挂接异步回调——注入托管身份令牌config.ConfigurationOptionsAsyncHandler async opts { await opts.ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential()); return opts; };第 3 步注册到 DI 容器services.AddStackExchangeRedisExtensionsSystemTextJsonSerializer(config);完成之后像往常一样注入IRedisDatabase读写数据即可连接字符串里没有任何密码。进阶连接池大小与多实例共存 回调会在连接池中的每一条连接上执行默认 5 条PoolSize可调整因此凭据获取开销会随池大小线性增长——DefaultAzureCredential内置令牌缓存通常无需担心。若需同时连接 Azure 与本地 Redis可使用命名配置数组services.AddStackExchangeRedisExtensionsSystemTextJsonSerializer(new[] { azureConfig, localConfig });其中每个配置用Name区分如AzureRedis/LocalRedis仅 Azure 那个需要挂接ConfigurationOptionsAsyncHandler并通过IsDefault true标记默认实例。常见连接问题排查 ️现象可能原因与解法应用启动即失败回调在 DI 单例构建阶段执行令牌获取失败会直接抛出异常——检查托管身份分配系统分配或用户分配及azure cache data contributor角色超时或拒绝连接确认端口为6380TLS且Ssl true本地调试需设置AZURE_CLIENT_ID等环境变量让DefaultAzureCredential找到凭据服务主体场景用ManagedIdentityCredential或ClientSecretCredential替换DefaultAzureCredential回调写法不变 回调在单例构建期间同步等待执行建议保持AbortOnConnectFail false以获得更平滑的启动体验。完整官方说明可参考仓库文档doc/azure-managed-identity.md多实例配置详解见doc/multipleServers.md。【免费下载链接】StackExchange.Redis.ExtensionsStackExchange.Redis.Extensions is a library that extends StackExchange.Redis, making it easier to work with Redis in .NET applications项目地址: https://gitcode.com/gh_mirrors/st/StackExchange.Redis.Extensions创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表