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

.NET Framework 4.8 MVC5本地用托管身份连接Azure SQL登录失败求助

解决本地.NET Framework 4.8 MVC5应用连接Azure SQL的登录失败问题

以下是你可能遗漏的关键步骤:

  • 检查Microsoft.Data.SqlClient版本兼容性
    .NET Framework环境下,需确保使用的Microsoft.Data.SqlClient NuGet包版本≥2.1.0,旧版本对Azure AD令牌的支持存在缺陷,无法正确解析DefaultAzureCredential获取的令牌。

  • 锁定DefaultAzureCredential的身份来源
    本地开发时DefaultAzureCredential会尝试多种身份源,若存在多个登录身份(如VS和Azure CLI登录不同账号),可能获取到错误的令牌。可强制仅使用VS凭据测试:

    using(var connection = new Microsoft.Data.SqlClient.SqlConnection(connString))
    {
      var credential = new DefaultAzureCredential(new DefaultAzureCredentialOptions
      {
          ExcludeEnvironmentCredential = true,
          ExcludeManagedIdentityCredential = true,
          ExcludeAzureCliCredential = true,
          ExcludeAzurePowerShellCredential = true,
          ExcludeInteractiveBrowserCredential = true
      });
      var token = credential.GetToken(new TokenRequestContext(new[] { "https://database.windows.net/.default" }));
      connection.AccessToken = token.Token;
      connection.Open();
    }
    
  • 验证令牌对应的身份权限

    1. 将获取到的令牌复制到https://jwt.ms解析,查看upn(用户主体名)或oid(对象ID)字段,确认该身份是你在数据库中授权的用户/组。
    2. 若使用AD组授权,需确保数据库中创建的是组用户而非单个用户:
      CREATE USER [你的AD组名] FROM EXTERNAL PROVIDER;
      ALTER ROLE db_datareader ADD MEMBER [你的AD组名];
      ALTER ROLE db_datawriter ADD MEMBER [你的AD组名];
      
  • 简化连接字符串配置
    尝试移除手动设置AccessToken的代码,直接在连接字符串中指定Azure AD身份验证方式,让SqlClient自动处理令牌获取:

    Server=tcp:<你的服务器名>.database.windows.net,1433;Database=<你的数据库名>;Authentication=Active Directory Default;
    
  • 等待AD组同步完成
    若刚将用户加入AD组并设置为SQL管理员,Azure AD与Azure SQL的同步可能存在15-30分钟的延迟,需等待足够时间后再测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:15:29