我以为我理解Kerberos是如何工作的,现在我根本不确定。
我们在使用Windows Active Directory的第三方服务器上进行Kerberos身份验证时遇到问题。服务器支持坚持他们所谓的“kerberos服务器”以某种方式传递附加信息,即标识为uid
和email
的字段,我需要确认它们确实是由服务器“发送”的他们可以进一步帮助他们。我把“kerberos服务器”看作是KDC,它通过将信息放入TGT来“发送”信息,uid
可能是旧的UPN,除了我不明白为什么要我确认它 真的存在。但是email
属性是什么?
我甚至阅读了整个RFC4210,但在任何门票中找不到任何其他信息的可能位置。一般来说,1.5.2讨论扩展协议,但是以非常抽象的方式。还有KRB_SAFE
和KRB_PRIV
消息,可用于传递任意八位字节串(3.4,3.5),但在标准中没有完成定义其结构的步骤。还有padata
扩展,5.2.7注释也被用作一个类型的漏洞,用于扩展与KDC的协议交换。,但这似乎是单向发送的。并且RFC似乎没有谈论认证服务器可以附加到故障单的其他已识别字段。
我的问题是双重的:
答案 0 :(得分:1)
服务器支持非常糟糕,告诉你他们真正想拥有什么。您需要的是:您希望KDC使用生成的服务票证向您发送PAC数据。以下是Microsoft的参考: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只能解码到第一级。请求是一个不透明的字节缓冲区。我有PAC数据解密的最小,工作(但不完整)的Java实现。
该结构中包含不的电子邮件值,但您拥有的是KERB_VALIDATION_INFO
结构中的RID userPrincipalName
结构和UPN_DNS_INFO
。后者非常容易解码。
首先通过LDAP检查所需的客户帐户userAccountControl
是否设置了NA
字段。
一帆风顺。