Kerberos 身份验证服务器如何传递额外的帐户信息?

How does the Kerberos authentication server pass additional account information?

我以为我了解 Kerberos 的工作原理,现在我完全不确定了。

我们在具有 Windows Active Directory 的第 3 方服务器上使用 Kerberos 身份验证时遇到问题。服务器支持坚持他们所谓的 "kerberos server" 以某种方式传递附加信息,即标识为 uidemail 的字段,我需要确认它们确实是 "sent"在他们可以提供进一步帮助之前服务器。我读 "kerberos server" 作为 KDC,将 "sends" 信息放入 TGT,而 uid 可能是好的旧 UPN,除了我不明白为什么要我确认它 确实存在。但是 email 属性是什么?

我什至阅读了整个 RFC4210,但在任何票证中都找不到任何可能的位置来获取额外信息。总的来说,1.5.2 讨论了扩展协议,但是是以非常抽象的方式。还有 KRB_SAFEKRB_PRIV 消息,可用于传递任意八位字节字符串(3.4、3.5),但标准中没有定义其结构的步骤。还有 padata 扩展,5.2.7 注释 也被用作扩展与 KDC 的协议交换的类型化漏洞。,但这似乎发送了一个-方法。 RFC 似乎无处谈论身份验证服务器可以附加到票证的额外标识字段。

因此我的问题是双重的:

  1. 理论:如何在 Kerberos 中传递附加属性,大概是以一种可互操作的方式(不是例如 Active Directory 扩展)? 我被要求确认什么
  2. 实用,如果有人可以提供帮助:如何跟踪 AD 放入这些属性的内容?

服务器支持非常糟糕,无法告诉您他们真正想要的东西。这是您需要的:您希望 KDC 将 PAC 数据与生成的服务票据一起发送给您。这是微软的参考:https://msdn.microsoft.com/en-us/library/cc237917.aspx.

如何验证?您需要接受安全上下文的帐户的密钥表。使用 Wireshark 配置它,记录所有流量。您应该会看到您要使用的服务的 TGS-REP。展开它,当keytab没问题时,你会看到解密后的信息。在下方某处,您应该看到授权数据字段,键入 1 (AD-IF-RELEVANT)。这是一个 ASN.1-encoded 元素序列。偶数元素位置描述子类型,奇数元素位置八位字节串。在该八位字节字符串中,又是一个 ASN.1 编码的序列,类型为 128 (AD-WIN2K-PAC),这就是 PAC 数据。不幸的是,Wireshark 只能解码到一级。该请求是一个不透明的字节缓冲区。我有最小的、有效的(虽然不完整)Java PAC 数据解密的实现。

电子邮件值包含在该结构中,但您拥有的是 RID KERB_VALIDATION_INFO 结构和 [=15= 中的 userPrincipalName ] 结构体。后者非常容易解码。

首先通过 LDAP 检查所需的客户帐户 userAccountControl 没有设置 NA 字段。

祝你好运。