繁体   English   中英

Azure SQL 使用 Azure Active Directory 进行身份验证

[英]Azure SQL authentication using Azure Active Directory

使用时,按照本教程连接可以正常工作:

var connection = (SqlConnection)Database.GetDbConnection();
connection.AccessToken = (new Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider()).GetAccessTokenAsync("https://database.windows.net/").Result;

但现在文档“不再推荐 Microsoft.Azure.Services.AppAuthentication”

因此,如Using Azure Active Directory authentication with SqlClient中所述更改我的连接,我收到以下错误:

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

尝试使用托管身份获取令牌。 无法获取访问令牌。 尝试对无法访问的网络进行套接字操作。 (169.254.169.254:80)

没有什么可以阻止该地址,但它从哪里获得 IP? 本教程的代码使用https://database.windows.net/来获取令牌(解析 65.55.23.107)。

我可以/应该在某处覆盖该地址吗?
是否缺少其他配置?

这些身份验证方式适用于不同的场景,例如,如果要使用Active Directory Integrated authentication ,则需要通过 ADFS 将本地 AD 与 Azure AD 联合,如果要使用Active Directory Managed Identity authentication ,则必须运行您在支持 MSI 的 Azure 服务中的代码(需要先启用 MSI) ,因为代码本质上是对 ZCF04A02E37B774FC311A48F608F608F608F608F608F605C3C597Z 进行了 API 调用,然后使用令牌实例访问元数据端点MSI 支持的服务。

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

1. 向 Azure AD 注册应用程序并创建服务主体

2. 获取登录值创建新的应用程序密码

3. 使用CREATE USER [Azure_AD_Object] FROM EXTERNAL PROVIDER 向服务主体授予权限

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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM