ASP.NET 应用程序中的 IIS 和 SQL Server Windows 身份验证

发布于 2024-11-03 10:29:37 字数 1235 浏览 3 评论 0原文

我设置了 3 个虚拟机:

  • (A) Windows 2008 R2 中的 Active Directory。
  • (B) Windows XP SP3 中的 Microsoft SQL Server 2008 Express。
  • (C) Windows XP SP3 中的 IIS。

SQL Server 和 IIS 均已加入域,但主机 PC 未加入。我还在 SQL Server 中创建了一个具有管理员权限的域管理员用户。我可以互相 ping/访问所有虚拟机,也可以从托管虚拟机的 PC 上 ping/访问所有虚拟机。我可以在 IIS VM 内的 SQL Server Management Studio 中使用 Windows 身份验证连接到 SQL Server VM,没有任何问题。

我在 IIS VM 中托管的 ASP.Net 应用程序中创建了一个非常简单的应用程序,该应用程序在 SQL Server VM 中打开数据库连接。我已将网站设置为通过 Windows 身份验证进行身份验证。这是我的连接字符串:

Server=DATABASE;Database=HAP;Trusted_Connection=True;

这是代码:

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

using(connection) {
    connection.Open();
}

我还在 IIS VM 的 AD 中设置了“信任此计算机来委派任何服务(仅限 Kerberos)”。

它抛出“登录失败。登录来自不受信任的域,无法与 Windows 身份验证一起使用。”异常。如果我将连接字符串更改为:

Server=DATABASE;Database=HAP;User ID=sa;Password=connectsql;

应用程序工作正常。

我确实需要它通过Windows 身份验证进行身份验证,而通过 SQL Server 身份验证进行身份验证。

注意: IIS 提示用户输入其 Windows 凭据。

I have setup 3 VMs:

  • (A) Active Directory in Windows 2008 R2.
  • (B) Microsoft SQL Server 2008 Express in Windows XP SP3.
  • (C) IIS in Windows XP SP3.

Both the SQL Server and IIS are joined in the Domain but the host PC is not. I've also created a domain administrator user with administrator privileges in the SQL Server. I can ping/access all the VMs from each other and from the PC hosting the VMs. I can connect to the SQL Server VM using Windows Authentication in SQL Server Management Studio inside the IIS VM with no problem.

I created a very simple application in ASP.Net application hosted in the IIS VM that opens a database connection in the SQL Server VM. I've set the web site to authenticate via Windows Authentication only. Here is my connection string:

Server=DATABASE;Database=HAP;Trusted_Connection=True;

Here is code:

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

using(connection) {
    connection.Open();
}

I've also set "Trust this computer for delegation to any service (Kerberos Only)" in AD for the IIS VM.

It throws "Login failed. The login is from an untrusted domain and cannot be used with Windows authentication." exception. If I change the connection string to this:

Server=DATABASE;Database=HAP;User ID=sa;Password=connectsql;

the application works fine.

I really need it to authenticate via Windows Authentication and not via SQL Server Authentication.

Note:
IIS prompts the user for his Windows credentials.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

挥剑断情 2024-11-10 10:29:37

我不清楚您是否打算让应用程序在登录使用时进行身份验证,或者您是否只是想让 asp.net 工作进程通过 AD 进行身份验证。

如果您希望用户使用其帐户进行身份验证,则需要在 Web 配置中设置“imperasonate=true”。这会对性能产生影响,但这可能没问题。

如果您只想通过工作进程进行身份验证,那么您需要将工作进程的身份设置为域帐户。

It's unclear to me whether you intend the application to authenticate as the logged in use, or whether you simply want to have the asp.net worker process be authenticated via AD.

If you want the user to authenticate with their account, then you need to set "imperasonate=true" in the web config. This will have performance ramifications, but that may be ok.

If you just want to authenticate via the worker process, then you need to set the identity of the worker process to a domain account.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文