gpt4 book ai didi

active-directory - 我可以模拟通过表单例份验证的客户端并建立与 SQL Server 的受信任连接吗?

转载 作者:行者123 更新时间:2023-12-04 02:10:56 24 4
gpt4 key购买 nike

这是我一直在尝试做的

使用表单例份验证和事件目录成员身份构建 ASP.NET MVC 3 应用程序。 Web 服务器和数据库是不同的物理服务器,因此是双跳。

我认为答案是 constrained delegation and protocol transition 上的这篇较早的文章?到目前为止,我还不能让这项技术发挥作用。

在部署到生产设置中的 Windows 2008 (IIS7) 之前,我正在从我的 DEV 机器(Windows 7、IIS7)上测试这个 Web 服务器。 Windows 2008 会有所作为吗?

什么有效,什么失败

我可以使用表单例份验证和 AD 成员身份登录。这似乎工作正常。当我尝试使用此代码进行数据库调用时:

public void AsUser(Action action)
{
using (var id = new WindowsIdentity(User.Identity.Name + @"@example.com"))
{
WindowsImpersonationContext context = null;
try
{
context = id.Impersonate();
action.Invoke();
}
catch (Exception ex)
{
// ex.Message is The type initializer for System.Data.SqlClient.SqlConnection threw an exception
// buried inner exeption is Requested registry access is not allowed
}
finally
{
if (context != null)
{
context.Undo();
}
}
}
}

它失败并出现异常,导致我相信我在本地 DEV 服务器上存在设置问题。内部异常是 Requested registry access is not allowed .

如果我设置断点并检查 WindowsIdentityImpersonate() 之后打电话我看到 ImpersonationLevel设置为 Identification .这似乎是它设置不正确的线索。任何人都可以确认吗?

我在正确的轨道上吗?这甚至可以设置吗?任何指针将不胜感激。

最佳答案

我认为你在正确的轨道上。您只需要对协议(protocol)转换设置进行更多故障排除工作。

我假设您正确配置了 Active Directory 成员资格提供程序,以便您可以使用 Active Directory 用户名和密码成功登录您的网页。如果不是这样,请忽略我的其余答案:)

根据我在您的问题中看到的,您使用 WindowsIdentity 的 S4USelf 获得了用户的 token 。然后,您使用 S4UProxy 将模拟 token 传递给 SQL 服务器。既然你说你得到了ImpersonationLevel.Identification只是,这意味着您没有进行协议(protocol)转换。

您需要了解允许一台机器在域中进行协议(protocol)转换是非常高的特权。授予服务器进行协议(protocol)转换几乎意味着您相信该服务器几乎就像一个域 Controller 。您需要有意识地在 AD 中做出此决定以使服务器具有此功能,并且您必须是域管理员才能进行此更改。如果你还没有这样做,你可能没有正确设置你的东西。

有几件事要检查。

首先,确保您选择了“仅信任此计算机以委派指定的服务”,然后在您的服务帐户上选择“选择使用任何身份验证协议(protocol)”。您可能想创建一个域帐户。 Here是有关如何为 ASP.NET 创建服务帐户的链接。请记住,您需要一个域帐户。创建域服务帐户后,请确保转到该帐户的委派选项卡并选择正确的选项。

其次,您需要确保正确设置 SPN。我意识到您发布的链接仅提及您的 ASP.NET 服务帐户的 SPN。实际上,您还需要确保您的 SQL 服务器上的服务帐户也设置正确。否则,Windows 根本不会使用 Kerberos 身份验证。它将回退到使用 NTLM。在 SQL Server 上正确设置 SPN 有很多细节。您可以查看here先看看你有没有运气。根据我的经验,大多数 DBA 都不知道如何正确设置它们。他们甚至没有意识到这一点,因为大多数应用程序都可以在 NTLM 上正常工作。您需要注意 SQL Server 服务帐户和它使用的端口号。

第三,您需要确保没有禁用您的 Kerberos 委派。一些敏感的 AD 账户默认是不允许委托(delegate)的。例如,内置管理员帐户。因此,您最好使用其他一些普通用户帐户进行测试。

更新

我刚刚找到 another article教你如何设置 ASP.NET 的协议(protocol)转换。它提到您需要向 IIS 服务帐户授予 TCB 权限,以确保它可以创建 Impersonation。键入 WindowsIdentity。你可以试一试。

关于active-directory - 我可以模拟通过表单例份验证的客户端并建立与 SQL Server 的受信任连接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4947462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com