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

Azure Media Services v3与Azure Function兼容性问题求助

解决Azure Function中Microsoft.IdentityModel.Clients.ActiveDirectory加载失败问题

这个问题的核心原因是Microsoft.IdentityModel.Clients.ActiveDirectory(ADAL)已被官方弃用,且Azure Functions运行环境对旧版ADAL库的兼容性不佳——哪怕你安装了对应NuGet包,也可能因依赖冲突或环境适配问题出现加载失败。下面是具体的解决步骤:


1. 替换ADAL为MSAL(推荐方案)

Azure Media Services v3官方现在推荐使用Microsoft.Identity.Client(MSAL) 完成身份验证,它不仅是ADAL的替代者,还能更好地适配Azure Functions的运行环境。

  • 先卸载旧的ADAL NuGet包:
    Uninstall-Package Microsoft.IdentityModel.Clients.ActiveDirectory
    
  • 安装最新稳定版的MSAL:
    Install-Package Microsoft.Identity.Client
    
  • 重写ArmClientCredentials类,基于MSAL实现身份凭据:
    using Microsoft.Identity.Client;
    using Azure.Core;
    using Microsoft.Extensions.Configuration;
    
    public class ArmClientCredentials : TokenCredential
    {
        private readonly IConfidentialClientApplication _msalClient;
        // AMS管理API的默认作用域
        private readonly string[] _scopes = new[] { "https://management.azure.com/.default" };
    
        public ArmClientCredentials(IConfiguration config)
        {
            var clientId = config["AmsServicePrincipalClientId"];
            var clientSecret = config["AmsServicePrincipalSecret"];
            var tenantId = config["AmsTenantId"];
    
            _msalClient = ConfidentialClientApplicationBuilder
                .Create(clientId)
                .WithClientSecret(clientSecret)
                .WithTenantId(tenantId)
                .Build();
        }
    
        public override async ValueTask<AccessToken> GetTokenAsync(TokenRequestContext requestContext, CancellationToken cancellationToken)
        {
            var authResult = await _msalClient.AcquireTokenForClient(_scopes)
                .ExecuteAsync(cancellationToken);
            
            return new AccessToken(authResult.AccessToken, authResult.ExpiresOn);
        }
    
        public override AccessToken GetToken(TokenRequestContext requestContext, CancellationToken cancellationToken)
        {
            var authResult = _msalClient.AcquireTokenForClient(_scopes)
                .ExecuteAsync(cancellationToken)
                .GetAwaiter()
                .GetResult();
            
            return new AccessToken(authResult.AccessToken, authResult.ExpiresOn);
        }
    }
    

2. 检查项目框架与依赖兼容性

  • 确保你的Azure Function项目目标框架(如.NET 6/.NET 7)与安装的MSAL包版本兼容,避免跨版本引用问题。
  • 用以下命令排查是否有其他依赖引用了旧版ADAL导致冲突:
    dotnet list package
    
    若发现冲突,可通过PackageReference中的PrivateAssets="All"或绑定版本号来强制统一依赖版本。

3. 清理重建项目,清除缓存

NuGet本地缓存可能引发引用异常,执行以下步骤重置:

  • 删除项目下的bin和obj文件夹
  • 重新还原NuGet包:
    dotnet restore
    
  • 重新构建项目:
    dotnet build
    

4. 确认Azure Function配置正确

确保你的Azure Function应用设置中已正确配置AMS服务主体的相关参数(客户端ID、密钥、租户ID),这些参数会被IConfiguration读取用于身份验证。


内容的提问来源于stack exchange,提问作者Isaac Levin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:56:56