问题标签 [kerberos-delegation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
567 浏览

java - KrbException: S4U2self 需要一个 FORWARDABLE 票

我正在尝试通过我的 java 代码执行 kerberos 约束委派。我有一个 keytab 文件、附加到用户的 SPN,并为该用户启用了 SPN 的委派。当我尝试使用 Keytab 登录时,我得到了 SPN 的 TGT。但是,此票证上的“可转发”标志设置为 false。

为了模拟其他用户,我需要将此标志设置为 true。

注意:在 SPN 用户上设置了 ADS_UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION 标志。

非常感谢任何帮助。

0 投票
1 回答
806 浏览

c# - 在 C# 中访问/解析“msDS-AllowedToActOnBehalfOfOtherIdentity”AD 属性

我需要管理Kerberos Resource Based DelegationC#我知道这更容易,Powershell但这不是要求)。user/computer/service帐户上的属性是msDS-AllowedToActOnBehalfOfOtherIdentity,但这似乎是一些COM我似乎无法处理的对象C#

在此之后a,与其他属性不同,我似乎无能为力。这是一些COM对象,我需要获取其中的帐户。Powershell报告这个属性返回一个System.DirectoryServices.ActiveDirectorySecurity对象,我在这个类中看到有用的方法来解码存储在 AD 等中的二进制格式。但这似乎不是属性调用的返回类型C#

0 投票
1 回答
605 浏览

sql-server - 由于双跳失败、受约束的委派,远程 powershell 请求中的 SSPI sql 访问失败

我们正在尝试从远程 serverB 上的 serverA 运行自动安装,该安装需要使用 windows 身份验证与 sql serverC 对话。

但是它无法返回:

使用“0”参数调用“打开”的异常:“用户 'NT AUTHORITY\ANONYMOUS LOGON' 登录失败。”

我们使用以下方法解决了这个问题:

但我们更愿意使用受约束的 kerberos 委托:

https://docs.microsoft.com/en-us/powershell/scripting/learn/remoting/ps-remoting-second-hop?view=powershell-6#resource-based-kerberos-constrained-delegation

我们尝试使用以下步骤执行 kerberos 委派:

完成后,这两个测试通过:

但是 sql 命令仍然失败,我们还没有找到解决方案。

我们在 github 上发现了同样的问题,看起来相同,但没有答案: https ://github.com/PowerShell/PowerShell/issues/9331

0 投票
1 回答
218 浏览

c++ - 仅在本地主机上工作的模拟 HTTP 身份验证

我正在处理在 ASP.NET Web API 上支持 Windows 身份验证,并且客户端是 C++。我从Microsoft获取了这个示例代码

并基于 HTTP.Sys 编写了一个基本的 ASP.NET Web API:

在我使用 localhost 之前,C++ 客户端应用程序能够在不提示输入凭据的情况下连接并执行 GET 请求(即通过 Negotiate 使用 Windows 身份验证)。当我在机器的 IP 上托管服务器时(例如http://192.168.1.1),客户端应用程序停止工作并使用用户凭据的回退选项(它获得 401 然后使用凭据重新发送 GET 请求) .

它看起来像是某个地方的安全问题。可能是什么问题?

  • 我正在使用 HTTP 并且需要 HTTPS?
  • AD控制器可以防止这种情况吗?
  • 操作系统(Windows 10 1803)会阻止这种情况吗?
  • 防火墙?

谢谢!

0 投票
1 回答
4291 浏览

c# - 当应用程序池使用域帐户运行时,IIS 模拟不起作用

我有一个在 Windows Intranet 环境中运行的 ASP.net 应用程序。我需要以当前登录用户的身份执行某些数据库更新。

IIS/服务器信息:

  • IIS 版本 10
  • 视窗服务器 2019
  • ASP.net 网络表单应用程序
  • .NET 4.7
  • 启用Windows 身份验证
  • 模拟匿名身份验证已禁用
  • 应用程序池使用集成管道
  • 应用程序池以其身份使用域服务帐户运行,该帐户有权根据需要访问其他资源。

其他详情:

  • 我所有的数据库连接字符串都设置为Integrated security=true
  • 在活动目录中,已配置 Web 服务器和 SQL 服务器之间的约束委派,允许MSSQLSvc : 1433MSSQLSvc(无端口)
  • 域服务帐户是 Web 服务器上本地管理员组的成员(仅用于测试目的)

当我执行需要以当前登录用户身份完成的数据库更新时,我以这种方式模拟它们:

这会引发异常 - System.Data.SqlClient.SqlException: Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'

如果我将应用程序池标识更改为使用AppPoolIdentity (默认应用程序池标识),则模拟工作正常。

为什么这种模拟适用于AppPoolIdentity,但不适用于我的域服务帐户

0 投票
0 回答
340 浏览

c# - 如何使用 Kerberos 委托在 Azure sql 上模拟用户

请帮助我解决 Azure Sql Windows 模拟问题

有一个三层应用程序使用服务层上的模拟来以已启动客户端应用程序的用户身份连接到 MS SQL。

Kerberos 票证用于在服务上模拟客户端用户,如下所示:

但是,当 Kerberos 票证用于在 Azure SQL 上进行模拟(并且与本地 MSSQL 一起使用)时,不会进行用户模拟。问题是 SQL 查询是在服务用户帐户而不是客户端用户帐户下在 AzureSQL 上执行的。

是否可以让 Kerberos 票证模拟与 Azure SQL 一起使用?

我知道有 EXECUTE AS LOGIN 功能可用于在 Sql 服务器上模拟用户。但如果可能的话,我想让 Kerberos 模拟工作。

UPD:我在服务上使用了 adal.dll 来连接 AzureSQL

LogonUser我编写了使用令牌和WindowsIdentity.Impersonate()组合在 AzureSQL 上模拟的 c# 代码。但是,如果可能的话,我想使用 Kerberos 委托

更新

我没有找到使用 Kerberos 模拟用户并在服务被模拟为用户时连接到 Azure SQL 的方法。

但是我有用户 T-SQLexecute as user=revert命令来做数据库“模拟”

0 投票
1 回答
167 浏览

windows - 特定 Windows 工作站的 Kerberos 委派错误

我遇到了工作站特定的 Kerberos 问题,希望这里的任何人都可以提出更多建议。

我们的应用程序有一个应用程序服务器和一个 Web 服务器,我们在应用程序层和 Web 层都配置了 kerberos。

对于某些用户,当我们提供 Kerberos 链接并且他们无法授权时。我们发现问题是特定于工作站的。在同一个有问题的工作站上,用户可以通过 Kerberos 身份验证访问应用程序服务器。

在网络逻辑上,我们看到以下错误:

[SpnegoFilter.doFilter] 虽然对 xxx 的用户身份验证成功,但集成身份验证无法提取用户的凭据,因为它似乎未配置或不允许委派

我正在寻找任何可能导致此问题的 Windows 设置?我们检查我们的域在浏览器级别的工作和非工作机器上是否受信任,并且 GPO 设置是否相同。

0 投票
1 回答
819 浏览

c++ - Active Directory 中的 Kerberos 使用具有受限双跳和模拟的 SSO 无法续订服务票证

深入挖掘已经在
客户端/服务器应用程序中讨论过的 Kerberos 约束委派,如何以域用户的身份在远程系统上创建进程而不将该用户的用户名/密码传输到远程系统?
使用 SSPI 支持多进程的 kerberos 约束委派

我有一个分布式应用程序在多个服务器上工作,并通过 Kerberos 令牌依赖 SSO 进行用户身份验证,并且所有内容都按照上述线程中的讨论进行布局(和工作)。简单来说,

  1. 用户连接到在 Server1 上运行的服务
  2. Server1 会将用户的作业分派给 Server2,后者正在服务主体帐户
    a 下运行另一个服务。Server1 向相关 SPN 请求(并获取)一张票证
    b。Server1 将票据传输到 Server 2
  3. Server2 解析该票证(即AcquireCredentialsHandleAcceptSecurityContext),然后调用QuerySecurityContextToken,然后是DuplicateHandleCreateProcess,将重复句柄传递给子进程,然后子进程调用ImpersonateLoggedOnUser
  4. Server2 上的子进程现在正在模拟原始用户运行,并且能够以某些 Server3 上的用户身份访问网络资源

所以,一切都很好……直到它不再起作用。在步骤 2a 中获得的服务票证的生命周期最长为 10 小时(假设 AD 设置为服务票证的默认 10 小时有效期)。票证生命周期有时远低于 10 小时的原因是因为步骤 1 和步骤 2 之间可能存在显着延迟,例如,用户可能会在提交作业进行处理之前进行一整天的准备工作。因此,服务票证的结束时间将是从原始用户登录时间算起的 10 小时,即与用户连接时生成的 TGT 的结束时间相匹配。

服务票证到期前大约 5 分钟,Server2 似乎尝试更新此票证,并且新票证确实出现在klist中,用于 Server2 上子进程的 LUID。然而,这个新的票据似乎“格式错误”,此时客户端进程失去了访问网络资源的能力,因为用户被冒充。具体来说,尽管客户端进程仍然持有到 Server3 资源的有效 Kerberos 服务票证,但当从 Server2 到达 Server3 时,它会从 Kerberos 身份验证下降到 NTLM 身份验证,此时它被 Server3 拒绝。

这是失败时在 Server2 上运行子进程的 LUID 的klist输出示例;

在上面的清单中,票证#4 是步骤 2a 中请求的原始服务票证;SPN 是“<em>SVCD/APP.Vnet.com”,与此 SPN(并运行 Server2 服务进程)关联的域帐户是“<em>svc”。此票证用于在 Server2 上创建用户的安全上下文,并且子进程正在模拟该安全上下文。当子进程尝试访问 LDAP 和 MS SQL 服务器(用于子进程需要执行的工作)时,在模拟之后生成票证 #0 和 #1,因此这确认所有约束委派设置都很好并且子进程正在运行正如预期的那样长达 10 小时。在某些情况下,票 #0 和 #1 需要续订 - 它们已成功续订,并且该过程继续进行。

现在,问题是:ticktes #2 和 #3 是在 #4 结束前几分钟生成的,但我觉得奇怪的是 ServerRealm 部分,即“<em>svc @ ...</em>”是空白的。此外,在生成这些票证的那一刻,Server2 子进程停止能够打开与 Server3 的新 MS SQL 连接(并且在 Server3 上,匿名登录拒绝事件会被记录并带有匹配的时间戳)。我还应该提到,虽然在上面的示例中,“<em>Server: svc @”有两个相同的票证,但在某些情况下,我看到了 7、14 个,有时甚至是 30 多个类似的票证。全部同时发布,好像 Server2 疯狂地尝试从 KDC 获取所需的内容,但失败了。

我的解释是 Server2 想要更新在模拟中使用的服务票证,但没有这样做。

在这一点上,我不确定问题是否在;
a) AD 设置(即,具有受限委派详细信息),或
b) “<em>svc”域帐户的权限(它具有SetImpersonatePrivilege但可能需要其他内容),或
c) 传输用户安全上下文的方式Server2 中的父进程和子进程之间,或者
d) 完全不同的东西

到目前为止,在阅读和研究了相当长的时间之后,我尝试了 c) 的各种序列排列(例如,使用DuplicateTokenEx + CreateProcessAsUser代替,翻转各种标志以获取重复的句柄和令牌等),但我我不知道我可以并且应该用 a) 和 b) 做什么(如果有的话)。我尝试更改一些设置,但没有任何效果,但我避免使用“核”选项,例如在svc帐户上设置SeTcbPrivilege ,因为在我的情况下这不是可接受的解决方案。

最后一个观察结果是票证 #4 缺少“<em>Kdc Called”和“<em>Renew Time”,但我认为这是通过InitializeSecurityContext获得的不透明票证的正常现象。

为了让 Server2 上的子进程运行超过原来的 10 小时,我需要更改什么?

0 投票
1 回答
561 浏览

kerberos - 如何在 IIS windows server 2012 中为 Web 应用程序配置 Kerberos?

我的场景:我有一个托管在 IIS windows 2012 服务器上的示例网站。当我浏览网站时,它应该提示输入 Active Directory 的凭据。我尝试使用“Windows 身份验证”,它工作正常,它使用 NTLM 进行 Windows 身份验证

如何使用 Kerberos 而不是 NTLM 登录网站

我已经尝试了链接中的步骤,但它不起作用 https://blog.kloud.com.au/2015/06/04/kerberos-web-application-configuration/

请帮我。

谢谢

0 投票
1 回答
363 浏览

kerberos - Kerberos:S4U2self 票证必须是 FORWARDABLE (Containerproxy)

我正在使用ShinyProxy为 Shiny 应用程序实现 Kerberos 身份验证,并为底层数据库提供票证委托。

所以基本上:

使用 Kerberos 登录 Shiny 可以正常工作,但是,ShinyProxy 无法获得模拟票证。错误是:

我的 krb5.conf 已设置:

ShinyProxy 的 SPN 是http/shinyproxy,它的 Service Account 是shinyproxy

服务帐户TRUSTED_TO_AUTH_FOR_DELEGATION设置了标志。

数据库的SPN db/mydatabase,它的Service Account是database

对于服务帐户shinyproxy,在 AD 的委派选项卡中,我为“任何身份验证协议”启用了约束委派,并添加了 SPNhttp/shinyproxydb/mydatabase.

日志输出:

可以看出,kerberos 票证和凭证是可转发的,但是,来自 KDC 的响应不包含可转发票证。

任何想法为什么会这样?