自动设置 kerberos 委派

发布于 2024-10-05 19:23:47 字数 349 浏览 1 评论 0原文

我有一个使用一些后端服务器(UNC、HTTP 和 SQL)的 Web 应用程序。为了实现此功能,我需要为运行 IIS AppPool 的帐户配置 ServicePrincipalNames,然后允许将 kerberos 委派给后端服务。

我知道如何通过 AD 用户和计算机工具的“委派”选项卡进行配置。

但是,该应用程序将部署到许多 Active Directory 环境中。事实证明,手动配置委派很容易出错,并且调试错误配置导致的问题非常耗时。我想创建一个可以为我执行此操作的安装脚本或程序。

有谁知道如何在 AD 中编写脚本或以编程方式设置约束委派?

如果失败,我如何编写脚本读取用户允许的服务以验证其设置是否正确?

I have a web app that uses some backend servers (UNC, HTTP and SQL). To get this working I need to configure ServicePrincipalNames for the account running the IIS AppPool and then allow kerberos delegation to the backend services.

I know how to configure this through the "Delegation" tab of the AD Users and Computers tool.

However, the application is going to be deployed to a number of Active Directory environments. Configuring delegation manually has proved to be error prone and debugging the issues misconfiguration causes is time consuming. I'd like to create an installation script or program that can do this for me.

Does anyone know how to script or programmatically set constrained delegation within AD?

Failing that how can I script reading the allowed services for a user to validate that it has been setup correctly?

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

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

发布评论

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

评论(1

音盲 2024-10-12 19:23:47

好吧,经过在互联网上的大量挖掘和一些测试后,我找到了前进的方向。

以下代码是c#。
可以通过 setspn 实用程序为用户或计算机设置 SPN。

或者,以下 C# 代码也可以执行相同的操作:

DirectoryEntry de = new DirectoryEntry("LDAP://"+usersDN);

if (!de.Properties["servicePrincipalName"].Contains(spnString))
{
    de.Properties["servicePrincipalName"].Add(spnString);
    de.CommitChanges();
}

设置约束委派:

if (!de.Properties["msDS-AllowedToDelegateTo"].Contains(backendSpnString))
{
    de.Properties["msDS-AllowedToDelegateTo"].Add(backendSpnString);
    de.CommitChanges();
}

如果用户已启用非约束委派,则您可能需要在启用约束之前将其关闭 - 但我没有完全测试此场景。

OK, after much digging on the internet and some testing, I've got a way forward.

The following code is c#.
Setting an SPN for a user or computer can be achieved via the setspn utility.

Alternatively, the following C# code can do the same:

DirectoryEntry de = new DirectoryEntry("LDAP://"+usersDN);

if (!de.Properties["servicePrincipalName"].Contains(spnString))
{
    de.Properties["servicePrincipalName"].Add(spnString);
    de.CommitChanges();
}

To set constrained delegation:

if (!de.Properties["msDS-AllowedToDelegateTo"].Contains(backendSpnString))
{
    de.Properties["msDS-AllowedToDelegateTo"].Add(backendSpnString);
    de.CommitChanges();
}

If the user has had non-constrained delegation enabled, you may need to turn this off before enabling constrained - but I didn't fully test this scenario.

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