.NET Framework 4.6.2项目:从ADAL迁移至MSAL获取Azure Key Vault令牌
.NET Framework 4.6.2下MSAL替代ADAL获取Azure Key Vault访问令牌的代码
第一步:安装MSAL NuGet包
在你的.NET Framework 4.6.2项目中,安装Microsoft.Identity.Client NuGet包(建议选用兼容.NET Framework 4.6.2的最新稳定版本,如4.56.0及以上)。
替代代码实现
using Microsoft.Identity.Client; using System; using System.Threading.Tasks; private async Task<string> GetTokenAsync(string authority, string clientId, string clientSecret, string scope) { try { // 构建机密客户端应用实例 var confidentialClient = ConfidentialClientApplicationBuilder .Create(clientId) .WithClientSecret(clientSecret) .WithAuthority(authority) .Build(); // 客户端凭据模式获取令牌 var result = await confidentialClient.AcquireTokenForClient(new[] { scope }) .ExecuteAsync(); if (string.IsNullOrEmpty(result.AccessToken)) { throw new InvalidOperationException("获取调用Key Vault服务所需的Bearer令牌失败"); } return result.AccessToken; } catch (Exception exp) { throw new Exception($"客户端{clientId}身份验证失败", exp); } }
关键说明
- API替换逻辑:
- ADAL的
AuthenticationContext替换为MSAL的ConfidentialClientApplicationBuilder,用于构建客户端身份验证实例 - ADAL的
AcquireTokenAsync(resource, ClientCredential)替换为MSAL的AcquireTokenForClient(scopes),这是客户端凭据模式的标准调用方式
- ADAL的
- Scope参数规范:
- 针对Azure Key Vault,正确的scope格式为
https://vault.azure.net/.default(替代原ADAL中的resource参数值)
- 针对Azure Key Vault,正确的scope格式为
- 结果校验调整:
- MSAL返回的
AuthenticationResult中AccessToken不会为null,但保留空值判断做兜底校验更稳妥
- MSAL返回的
使用示例
调用时传入对应参数即可:
var token = await GetTokenAsync( authority: "https://login.microsoftonline.com/你的租户ID", clientId: "你的Azure AD应用客户端ID", clientSecret: "你的Azure AD应用客户端密钥", scope: "https://vault.azure.net/.default" );
内容的提问来源于stack exchange,提问作者Vigneash Selvaraj
相关产品推荐
相关产品推荐

