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

使用EF Core通过Azure AD认证SQL Server失败求助

解决Azure Function V4 + EF Core 6 用用户分配托管身份连接SQL Server时的令牌获取失败问题

针对你遇到的“无法获取令牌”错误,可从以下几个关键方向排查和修复:

1. 升级Microsoft.Data.SqlClient版本

你当前使用的SQL Client 2.1.4版本过旧,对用户分配托管身份的支持存在局限性。建议升级至Microsoft.Data.SqlClient 4.0.0及以上版本(与.NET 6、EF Core 6兼容的稳定版本),新版本对Azure AD托管身份的认证流程支持更完善。

2. 修正连接字符串格式

确保连接字符串的参数正确:

  • User Id必须填写用户分配托管身份的ClientId(直接填写GUID值,而非变量)
  • 完整格式示例:
Server=tcp:<你的SQL服务器名>.database.windows.net,1433;Initial Catalog=<你的数据库名>;Authentication=Active Directory Managed Identity;User Id=<用户分配MI的ClientId>

注意:不要在连接字符串中使用变量引用,直接写入ClientId的实际值;若要通过应用配置管理,可将ClientId存入Function应用设置,再通过配置绑定读取拼接。

3. 完成数据库级别的身份权限配置

仅在SQL Server的IAM中添加托管身份是不够的,必须在目标数据库内创建对应的用户并分配权限:
执行以下SQL语句(在SQL Server Management Studio或Azure Portal的查询编辑器中运行):

-- 创建对应用户分配托管身份的数据库用户
CREATE USER [你的用户分配MI名称] FROM EXTERNAL PROVIDER;
-- 分配必要的数据库权限(根据业务需求调整角色)
ALTER ROLE db_datareader ADD MEMBER [你的用户分配MI名称];
ALTER ROLE db_datawriter ADD MEMBER [你的用户分配MI名称];
-- 若需要管理权限,可添加db_owner角色
-- ALTER ROLE db_owner ADD MEMBER [你的用户分配MI名称];

4. 验证Function应用的托管身份配置

  • 确认用户分配的托管身份已成功添加至Function应用:进入Function应用的身份->用户分配页面,查看该身份状态为“已添加”
  • 确保Function应用的系统分配身份未与用户分配身份产生冲突(若不需要系统身份,可暂时关闭)

5. 检查EF Core的DbContext配置

确保EF Core正确使用配置的连接字符串:

var builder = WebApplication.CreateBuilder(args);

// 注册DbContext,使用配置中的连接字符串
builder.Services.AddDbContext<YourDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("YourDbConnection")));

无需额外配置EF Core的认证逻辑,只要连接字符串正确,SqlClient会自动处理托管身份的令牌获取。

6. 排查网络与权限边界

  • 确认Function应用所在的VNet(若启用)可访问SQL Server的网络端点
  • 检查用户分配托管身份是否被限制了Azure SQL的访问权限(比如通过Azure AD条件访问策略)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:50:35