You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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);
    }
}

关键说明

  1. API替换逻辑:
    • ADAL的AuthenticationContext替换为MSAL的ConfidentialClientApplicationBuilder,用于构建客户端身份验证实例
    • ADAL的AcquireTokenAsync(resource, ClientCredential)替换为MSAL的AcquireTokenForClient(scopes),这是客户端凭据模式的标准调用方式
  2. Scope参数规范:
    • 针对Azure Key Vault,正确的scope格式为https://vault.azure.net/.default(替代原ADAL中的resource参数值)
  3. 结果校验调整:
    • MSAL返回的AuthenticationResult中AccessToken不会为null,但保留空值判断做兜底校验更稳妥

使用示例

调用时传入对应参数即可:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:55:14