我编写了一个服务,它在授权机器上的 gMSA 帐户下运行得很好。我想让它登录到使用 RADIUS(针对我们自己的 Active Directory)来授权用户的第三方硬件设备。
我总是可以专门为此目的创建另一个域帐户并自己管理密码,但这实际上抵消了首先拥有 gMSA 的一些优势。
显然,为了发送自己的凭据,该服务需要知道自己的密码 - 但 gMSA 帐户的主要好处是密码是自动管理的,因此没有人需要跟踪它。而且我知道,实际上,密码通常不会以可检索的状态存在于 Active Directory 中。
然而 - 当我在 PowerShell 中创建一个新的 gMSA 时New-ADServiceAccount
,其中一个选项是-PrincipalsAllowedToRetrieveManagedPassword
. 此属性通常指向一个安全组,该安全组的成员是那些被授权使用服务帐户的服务器的计算机帐户。尽管如此,命名法似乎暗示检索在技术上是可能的。
当我想到这一点时进一步挖掘,我在这个博客上发现了一个作者评论,描述了这个过程的复杂性,但我怀疑其中的一些步骤(特别是解构msDS-ManagedPassword blob)对于服务帐户是无法实现的。
想想看,即使我能得到密码,当网络策略服务器(例如)在 RADIUS 请求中收到密码时,它是否能够验证它?我怀疑这些细节是服务器故障的问题,但我真的只是想大声说我是否在这里吠错了树。
我碰巧在 C# 中工作,但如果这需要本机 Windows API,我不会感到惊讶。
总结一下:是否有一个函数调用(或两个或三个)可以检索/重新创建 gMSA 帐户的当前密码?