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

.NET Core Web应用使用Active Directory Interactive连Azure SQL部署后异常

错误根因

Active Directory Interactive 认证模式依赖交互式桌面环境弹出浏览器窗口完成身份校验,本地Visual Studio运行时处于你的本地桌面环境,支持交互操作所以可以正常完成认证。部署到Azure App Service后是无界面的服务端运行环境,无法触发交互式登录弹窗,因此执行connection.Open()步骤时直接抛出异常。

适配部署场景的解决方案

你的需求为每个访问应用的用户使用自己的微软账号身份访问Azure SQL,且所有用户已加入对应AAD组,按以下步骤配置即可:

步骤1:配置App Service身份与权限

  • 开启App Service的微软身份提供商认证,用户访问应用时会先完成微软账号登录,应用可获取到当前登录用户的身份凭证
  • 找到App Service对应的AAD应用注册,添加Azure SQL Database的user_impersonation委托API权限,完成租户管理员全局同意,覆盖所有AAD组内用户的权限授权

步骤2:调整数据库连接逻辑

不再使用Active Directory Interactive认证参数,改为获取当前登录用户的Azure SQL访问令牌传入连接对象,推荐引入Microsoft.Identity.Web NuGet包简化令牌获取逻辑,代码示例如下:

// 构造函数注入ITokenAcquisition服务(Microsoft.Identity.Web内置提供)
private readonly ITokenAcquisition _tokenAcquisition;
public YourDatabaseService(ITokenAcquisition tokenAcquisition)
{
    _tokenAcquisition = tokenAcquisition;
}

public async Task<SqlDataReader> ExecuteQueryAsync(string query)
{
    // 连接字符串移除Authentication参数
    var connectionString = @"Server=demo.database.windows.net; Database=testdb";
    await using SqlConnection connection = new SqlConnection(connectionString);
    
    // 获取当前用户访问Azure SQL的令牌
    var sqlAccessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(new[] { "https://database.windows.net/.default" });
    connection.AccessToken = sqlAccessToken;
    
    await connection.OpenAsync();
    using SqlCommand command = new SqlCommand(query, connection);
    return await command.ExecuteReaderAsync(CommandBehavior.CloseConnection);
}

步骤3:确认Azure SQL权限配置

确认你要授权的AAD组已经在目标Azure SQL库中创建了外部用户并分配对应权限,执行SQL示例如下:

-- 替换为实际AAD组名
CREATE USER [业务访问AAD组] FROM EXTERNAL PROVIDER;
-- 按需分配对应角色,比如读权限、写权限
ALTER ROLE db_datareader ADD MEMBER [业务访问AAD组];
ALTER ROLE db_datawriter ADD MEMBER [业务访问AAD组];

内容的提问来源于stack exchange,提问作者Taimur Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:00:04