【发布时间】:2010-09-28 12:02:44
【问题描述】:
我想将一个字符串与当前经过身份验证的用户的密码进行比较(加密密钥比较)。似乎从票证缓存中检索密码,但我该怎么做?
谢谢
【问题讨论】:
我想将一个字符串与当前经过身份验证的用户的密码进行比较(加密密钥比较)。似乎从票证缓存中检索密码,但我该怎么做?
谢谢
【问题讨论】:
无法从客户端或 kerberos 系统中任何地方的可用信息中检索密码。根据kerberos article in wikipedia(它包含与我在其他来源阅读的信息相似的信息),用户输入的密码通过单向函数被散列为从此时起用作秘密的东西。该密钥可在密钥分发中心 (KDC) 获得,并且授予票证 (TGT) 使用此密钥进行对称加密。要接收和使用 TGT,客户端必须提供解密包的秘密——这是通过向用户询问密码来完成的。完成后,TGT 被解密并保存在票证缓存中。
TGT 本身有部分用只有 kdc 知道的秘密加密,它不保存用户的密码。例如,this article from 2000 解释说,密码也不存储在票证缓存中 - 只是 TGT 的一部分。据我了解,使用票证缓存检查用户密码是不可能的。
您可能想编写自己的 CallbackHandler 以某种方式重用或以编程方式提供凭据,但据我了解,这可能会导致安全问题。
您可能想考虑用完全不同的方法来解决您的问题,但几乎没有信息可以建议任何其他解决方案。
【讨论】:
我不知道这是否可能。该散列可以使用只有服务器知道的密钥来加盐。我会尝试使用用户的 id 和给定的字符串进行身份验证。如果服务器接受认证请求,则密码有效。
【讨论】: