我的代码目前可以很好地为我的网站用户执行 SPNEGO (Kerberos) 身份验证。我有一个特殊的缓存机制来加速一些基于用户身份确认的决策。对于普通密码身份验证,这很简单——将“当前”用户+密码组合与“旧”组合进行比较——如果没有变化,仍然可以缓存决策。否则,他们需要重新评估。
我正在尝试为 Kerberos 做同样的事情。我已经让它大部分工作了,但我很困惑为什么GSSCredential.equals()
不能工作。特别是,我在验证每个请求后获得的 GSSCredential 实例是“相同的”,因为它们是针对同一个用户、相同的服务,甚至是在相同的情况下获得的(我认为)。如果我做 atoString()
并且比较输出它们是相同的(是的,我知道这无关紧要,但这仍然很好地表明它们可能应该相等)。
但是,GSSCredential_1.equals(GSSCredential_2)
在请求之间总是返回 false。这可能是因为每个都是使用不同的 SPNEGO 票证获得的(根据 Kerberos,这是必要的,以避免重播场景),但这些票证仍然属于同一个主体,并且“针对”同一个服务主体。
我需要做出的代码决策最好这样表述:
这些新凭证是否代表与以前使用的相同的安全主体?到期、目的有效性和其他问题单独评估,然后再评估。
比较他们的名字“有效”,但我希望有一些更强大的东西。
有任何想法吗?