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 packagePackageReference中的PrivateAssets="All"或绑定版本号来强制统一依赖版本。
3. 清理重建项目,清除缓存
NuGet本地缓存可能引发引用异常,执行以下步骤重置:
- 删除项目下的
bin和obj文件夹 - 重新还原NuGet包:
dotnet restore - 重新构建项目:
dotnet build
4. 确认Azure Function配置正确
确保你的Azure Function应用设置中已正确配置AMS服务主体的相关参数(客户端ID、密钥、租户ID),这些参数会被IConfiguration读取用于身份验证。
内容的提问来源于stack exchange,提问作者Isaac Levin
相关产品推荐
相关产品推荐

