ASP.NET Core控制器如何无交互创建DefaultAzureCredential读取Key Vault密钥
ASP.NET Core服务端无交互初始化DefaultAzureCredential访问Key Vault方案
DefaultAzureCredential本身自带按优先级排序的认证链,交互式浏览器认证是整个认证链的最后一个降级选项,只要你在服务端运行环境中提前配置好任意一种非交互认证凭据,认证流程会在命中对应凭据后直接返回,完全不会触发交互式认证。
不同运行场景的非交互配置方式如下:
- 本地开发调试场景
不想触发浏览器弹窗的话,提前在本地终端执行az login完成一次Azure CLI登录,后续调试时DefaultAzureCredential会自动读取Azure CLI的本地缓存凭据完成认证,全程无弹窗。也可以在本地开发环境的用户环境变量中配置AZURE_CLIENT_ID、AZURE_TENANT_ID、AZURE_CLIENT_SECRET三个服务主体参数,认证组件会优先读取环境变量完成认证,不会走到交互流程。 - Azure PaaS服务(App Service、Functions、容器应用等)部署场景
优先使用托管标识认证:给对应的服务实例开启系统分配托管标识,或绑定提前创建好的用户分配托管标识,再给该托管标识分配Key Vault的密钥读取权限即可。部署后DefaultAzureCredential会自动访问Azure实例元数据服务拉取临时访问令牌,全程无交互、不需要在代码或配置中存储任何静态密钥。
如果使用用户分配托管标识,只需要在初始化凭据时指定托管标识的客户端ID即可,示例代码:var client = new SecretClient( new Uri("https://<你的Key Vault名称>.vault.azure.net/"), new DefaultAzureCredential(new DefaultAzureCredentialOptions { ManagedIdentityClientId = "<用户分配托管标识的客户端ID>" }) ); - Azure虚拟机/虚拟机规模集部署场景
和PaaS服务逻辑一致,直接给虚拟机配置托管标识、分配Key Vault权限即可,认证组件会自动通过元数据服务获取令牌,无额外配置。 - 非Azure环境(自建服务器、第三方云主机/容器服务)部署场景
提前创建好Azure AD服务主体,给服务主体分配Key Vault的密钥读取权限,再将服务主体的客户端ID、租户ID、客户端密钥三个参数配置到服务器的系统环境变量中(不要硬编码在代码或配置文件里),DefaultAzureCredential启动时会自动读取环境变量中的服务主体信息完成非交互认证。
注意:认证链会严格按照「环境变量凭据 > 工作负载标识凭据 > 托管标识凭据 > Visual Studio凭据 > Azure CLI凭据 > Azure PowerShell凭据 > 交互式浏览器凭据」的顺序尝试,只要前面任意一个非交互凭据验证可用,就不会执行后续的认证步骤,自然不会弹出交互窗口。
内容的提问来源于stack exchange,提问作者si Hwang
相关产品推荐
相关产品推荐

