SOA - 认证服务设计

7
我正在设计面向服务的架构(SOA),并需要一个认证服务来识别客户端并允许它们访问资源。
实际上,我找到了两种可能的解决方案:
1. 使用公钥和私钥对每个请求进行签名。 2. 基于令牌的身份验证,使用公钥和私钥。
我不希望采用oauth2服务,因为这会增加系统设计的开销。相反,我更喜欢采用更简单(但也很强大)的身份验证解决方案。
因此,我提供了AuthenticationService,可以由发出API请求的客户端查询(获取要在请求旁传递的令牌),或由每个单独的API端点查询,以执行反向检查签署请求的HMAC是否匹配(检查用于生成HMAC的私钥是否有效)。
我发现后一种方法对于执行多个操作的最终开发人员更简单,但也需要更多的检查来验证令牌并处理其过期...
令牌解决方案可能引发哪些潜在的安全问题,而单个请求HMAC则没有?您更倾向于哪种方法,可能是为什么?

你说的_SOA身份验证_是什么意思??你是在构建自己的SOA套件吗?SOA由许多技术(消息传递、Web服务、BPEL等)组成,你将要使用的SOA套件应该为你提供已经制作好的手段,用于每个请求对用户进行身份验证,无论他们是来自ESB外部还是内部。 - Alonso Dominguez
我的意思是整个架构都是基于面向服务的。所有服务都需要识别用户以允许/拒绝请求,因此我需要身份验证,这也将是一个独立的服务。 - user1543863
@AlonsoDominguez 我编辑了帖子正文,你是对的,也许它不清楚作为“SOA身份验证”。 - user1543863
1个回答

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

有关此解决方案的更多信息,请参见此处提供的出色解释,这篇文章帮助我很多,让我真正了解了实际实现。

希望这能真正帮助世界上面对相同问题的其他人。


3
在过去的六个月里,我非常惊讶地发现很少有人谈论这个确切的问题。当然,围绕单个应用程序及其网络服务的身份验证和授权以及使用 Kerberos、CAS、SAML 等重型东西的联合身份有大量的讨论。我一直在考虑将 OAuth 强制用于此类问题。你考虑过 OAuth 吗?是什么促使你实现自己的解决方案而不是使用OAuth呢? - Brendten Eickstaedt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接