【问题标题】:SOA - Authentication Service designSOA - 身份验证服务设计
【发布时间】:2012-09-24 06:02:13
【问题描述】:

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

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

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

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

所以我在这里带来了我的AuthenticationService,它可以由发出 API 请求的客户端查询(获取与请求一起传递的令牌),也可以由每个单个 API 端点查询以执行反向检查对请求进行签名以查看其是否匹配的 HMAC(检查用于生成 HMAC 的私钥是否有效)。

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

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

【问题讨论】:

  • SOA 身份验证是什么意思?您正在构建自己的 SOA 套件吗? SOA 是多种技术(消息传递、Web 服务、BPEL 等)的组合,您将使用的 SOA 套件应该为您提供现有的方法来验证每个请求的用户,无论他们来自 ESB 外部还是内部。
  • 我的意思是整个架构都是面向服务构建的。所有服务都需要识别用户是谁才能允许/拒绝请求,所以我确实需要身份验证,这本身也是一个独立的服务。
  • @AlonsoDominguez 我编辑了帖子正文,你是对的,也许它不能明确为“SOA 身份验证”。

标签: ruby-on-rails web-services api soa


【解决方案1】:

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

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

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

【讨论】:

  • 在过去的 6 个月里,很少有人谈论这个确切的问题,这让我感到非常惊讶。当然,围绕单个应用程序及其 Web 服务的身份验证和授权,以及使用诸如 Kerberos、CAS、SAML 等重量级东西的联合身份进行了大量讨论。我一直在回过头来强制 OAuth 为这类事情提供服务.你考虑过 OAuth 吗?是什么促使您实施自己的解决方案?
猜你喜欢
  • 1970-01-01
  • 2015-09-11
  • 2022-01-10
  • 2013-08-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多