[英]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
,它可以适用于任何场景,请按照以下步骤操作。
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.