我尝试使用 .Net Framework 4.7.2 将我们的 ASP.Net 应用程序从 SQL 用户名/密码身份验证重新配置为基于令牌的 Azure Active Directory 身份验证,方法是使用运行网站的 VM 的系统分配托管标识。
在 SQL Server 上启用 AD 管理员创建了一个 AAD 组,在其中我添加了 VM 的 SMI,并在 SQL 中为每个数据库创建了一个带有“来自外部提供商”的用户
我可以使用 AAD MFA 身份验证通过 SSMS 登录到 SQL Server。
在我安装的虚拟机上https://www.nuget.org/packages/Microsoft.Azure.Services.AppAuthentication &https://www.nuget.org/packages/Microsoft.IdentityModel.Clients.ActiveDirectory/
通过将 dll 复制到我的网站的 bin 目录中。
在 web.config 中我添加了两个带有公钥令牌和重新配置的连接字符串的 SqlAuthenticationProviders 部分:
添加名称=“Master”连接字符串=“服务器=tcp:xxxxdb01.privatelink.database.windows.net,1433;初始目录=master_dev;UID=app;身份验证=Active Directory Interactive;TrustServerCertificate=True”提供程序名称=“System.Data.SqlClient”
IIS 出现多次错误后,无法找到 dll,最后出现错误:
参数:连接字符串:[未指定连接字符串],资源:https://database.windows.net/, 权威:https://login.windows.net/97293BC6-059A-4DCB-9520-7FF64761E91E。异常消息:尝试使用 Active Directory 集成身份验证获取令牌。无法获取访问令牌。无法从操作系统获取用户名。内部异常:未完成帐户名与安全 ID 之间的映射。
我考虑了数据库上授权的“系统分配的托管标识”与在 VM 上运行的 ASP.Net 应用程序之间的链接。IIS 如何获取托管 ID 以针对 SQL 进行身份验证?
答案1
IIS 出现多次错误后,无法找到 dll,最后出现错误:
这很可能是这里的问题,IIS 无法看到这些 DLL,因此忽略了连接字符串并根据错误消息恢复使用集成身份验证。
此外,对 AAD 的身份验证不是使用 IIS 进行的,它实际上是使用在 IIS 上运行的应用程序的上下文进行的,因此您需要配置的实际上是应用程序,而不是 IIS。