如何使用 Kerberos 票证中的 PAC 信息

How to use the PAC information in the Kerberos ticket

我正在使用 Kerberos 开发一个服务器服务并从客户端获得票证,我可以使用预定义的密钥表解密票证,现在我的问题是如何使用票证中的 PAC 信息。以前我使用 LDAP 过程查询用户的组成员资格以获取授权信息。

现在 PAC 的登录信息包括成员资格,但它是组 ID,但我需要 "DN" 基于文本的格式 (CN=xxx,OU=xxx, DC=xxx...)。

我想知道一般情况下,如何在服务服务器的票证中使用此授权数据。谢谢!

如果您的应用程序服务未在 Windows 上 运行,您将无法阅读 PAC,除非跳过一些严重的环节。 PAC 是使用 Microsoft 专有代码构建的,这是 Microsoft 在其 Kerberos IAW 中引入的内容 RFC 1510 but their words, "slightly modified". Shortly after the release of Windows 2000 [Active Directory], Microsoft received some negative press attention because of the proprietary way they used the PAC field in a Kerberos ticket. [Microsoft] explicitly forbids the creation of software that implements the PAC as described in the specifications.

我花了很长时间试图找到开源和可靠的东西,无论如何都可以读取 PAC,我发现 JAASLounge does this。虽然这是一篇旧文章(从 2010 年开始)。请注意,根据我对 Microsoft 声明的解释,这似乎违反了他们的条款和条件。

无论如何,我还在这个论坛的此处添加了两个线程,这些线程声称已经让 JAASLounge 正常工作,以及他们必须解决的一些问题。

Decrypt kerberos ticket using Spnego

如果您不想走这条路,并且想绕过 PAC 来确定 AD 用户的组成员身份,那么您将不得不求助于 LDAP 回调到 AD 域控制器。

最后我要说的是,如果您 运行 在 Windows-based 应用程序服务器(例如 IIS 或 SharePoint)上,PAC 的 Kerberos 解码会自动进行,因此无需特殊代码,需要配置或密钥表文件。