.net core 使用Azure Active Directory的Azure SQL身份验证

.net core 使用Azure Active Directory的Azure SQL身份验证,.net-core,azure-active-directory,azure-sql-database,.net Core,Azure Active Directory,Azure Sql Database,使用时,连接工作良好,如下所示: var connection=(SqlConnection)数据库.GetDbConnection(); connection.AccessToken=(新的Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider()).GetAccessTokenAsync(“https://database.windows.net/三、结果; 但现在说“不再推荐Microsoft.Azure.

使用时,连接工作良好,如下所示:

var connection=(SqlConnection)数据库.GetDbConnection();
connection.AccessToken=(新的Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider()).GetAccessTokenAsync(“https://database.windows.net/三、结果;
但现在说“不再推荐Microsoft.Azure.Services.AppAuthentication”

因此,如中所述更改连接会出现以下错误:

托管用户不支持集成Windows身份验证

试图使用托管标识获取令牌。无法获取访问令牌。试图对无法访问的网络执行套接字操作。(169.254.169.254:80)

没有任何东西阻止该地址,但它从何处获取IP?使用的教程代码
https://database.windows.net/
获取令牌(解析为65.55.23.107)

我可以/应该在某个地方覆盖该地址吗?

缺少任何其他配置?

这些身份验证方法适用于不同的场景,例如,如果您想使用,您需要通过ADFS将本地广告与Azure广告联合,如果您想使用,您必须在中运行代码,因为代码本质上对进行API调用以获取访问令牌,然后使用令牌进行身份验证,它仅在MSI支持的服务中可用

因此,如果要将代码从旧sdk迁移到新sdk,需要选择适用于场景的正确身份验证方式。这里我建议您使用,它可以应用于任何场景,请按照以下步骤操作

一,

二,。和

三,。使用
从外部提供程序创建用户[Azure\u AD\u对象]

4.然后使用代码,用您的代码修复从步骤2得到的值

string ConnectionString = @"Server=demo.database.windows.net; Authentication=Active Directory Service Principal; Database=testdb; User Id=AppId; Password=secret";

using (SqlConnection conn = new SqlConnection(ConnectionString)) {
    conn.Open();
}

如果您使用了azure sql server,我认为您需要检查是否在服务器防火墙中添加了ip(azure portal转到您的数据库->单击设置服务器防火墙)。另一点是检查您是否对sql Server有怀疑,如果从SSM连接并使用本教程的CodeThank Joy,这可能是防火墙问题。理想情况下,我希望远离密码/机密(我认为这是使用AAD auth的主要好处)。我将研究ADF,认为这可能是关键。关于托管身份验证。。。这是否只能从Azure内部访问?没有办法配置这个地址吗?@JvR好吧,如果你能设置ADFS,也可以。是的,该端点仅在azure中可访问,它被命名为azure实例元数据端点,无法对其进行配置。这是一个荒谬的突破性更改!所以我的环境必须改变以适应新的包,它必须在Azure中有一些硬编码的IP地址@是的,你是对的。