7

我正在设计一个面向服务的体系结构,我还需要一个身份验证服务来识别客户端并允许他们访问资源。

实际上我找到了两种可能的解决方案:

  • 使用 pubkey 和 privatekey 对每个请求进行签名
  • 使用 pubkey 和 privatekey 的基于令牌的身份验证

我没有假设 oauth2 服务,因为它会为我的需要增加太多的系统设计开销,相反,我更喜欢采用更简单(但也很强大)的身份验证解决方案。

因此,我AuthenticationService的 .查看它是否匹配(检查用于生成 HMAC 的私钥是否有效)。

对于执行多项操作的最终开发人员来说,我可以看到最新的更简单,但它还需要更多检查来验证令牌并处理它的到期...

令牌解决方案会引发哪些单请求 HMAC 不会引发的潜在安全问题?你更喜欢什么,可能,为什么?

4

1 回答 1

7

最后我最终设计了一个基于相同亚马逊解决方案的身份验证服务。它要求用户使用私钥对每个请求进行签名。因此,请求将发送一个值为“PUBKEY:SIGNATURE”的 Authorization 标头,其中签名是由任何请求数据(可能是请求主体本身)加上时间戳组成的 HMAC,要在 Date 标头中传递。这个实现足够强大,可以避免 MITM 和重放攻击。

有关此解决方案的更多信息,这里是一个很好的解释,它帮助我理解了真正的实现。

希望这真的可以帮助世界上面临同样问题的其他人。

于 2012-10-03T19:16:25.330 回答