SOA学校 为新企业构建无懈可击的安全体系


是IT界永远的关注点。当人们考虑到所有不同的可能危险以及解决这些危险的大量解决方案时,这可能是一个相当令人生畏的领域。但是, 企业安全 的目的实际上只是归结为建立和维护各种级别的 访问控制 。 Mule本身一直在传输、服务层和消息的层面上促进安全的消息处理。Mule的配置可以包括所有 Spring Security 所提供的,例如,轻松访问LDAP服务器进行 认证 和授权。除此之外, Mule 应用程序可以应用 WS-Security 从而促进,例如,验证传入的 SAML 消息。 但在这篇文章中,我并没有深入研究非常广泛的安全功能集的所有细节,而是通过考虑驱动 面向服务的架构 中的安全需求的主要关注点,整个行业如何解决这些关注点,随后出现的基于这一行业最佳实践的流行技术,以及最后,在Mule中实现这些技术来接近这一主题。

主要关注点

完整性

这是所有关于知道谁发送的信息。确保我们的IT资源是一个决定谁可以访问它们的问题,当然,进入授权的领域,每个人或系统应该在多大程度上可以访问它们。一个消息(也类似于一个服务调用)必须被确定为是真实的,以便服务器接受并处理它。如果服务器识别出客户是服务的有效用户,那么它就是真实的。现在,这种识别通常是通过伴随消息的某种凭证来实现的。然而,验证哪个客户端发送了消息并不能保证消息的完整性:它可能在运输过程中被一些不友好的第三方修改了 信息的完整性,包括认证,保证服务器收到的信息正是由已知的客户端发送的。

保密性

服务器对已知客户发送的信息的完整性感到放心是很好的,但从客户到服务器的旅程可能被一些不受欢迎的间谍看到,他们看到了信息中所有可能非常隐私的细节!因此,有必要隐藏这些细节。 因此,有必要将这些细节从客户的交付点隐藏到服务器的接收点。客户端和服务器之间需要达成一个协议,以便能够以一种只允许服务器发现的方式隐藏信息的细节,反之亦然。

行业的反应

基于令牌的凭证

从两个角度来看,将用户名/密码对与消息一起发送的常见做法是不值得推荐的。  

  1. 密码有一定程度的可预测性,而理想的做法是最大限度地提高随机性或熵值。用户名/密码对是一种低熵的认证形式。  
  2. 另外,密码的维护也很麻烦。如果你需要改变一个密码,那么你会立即影响所有使用该密码的客户。在每一个客户都被重新配置之前,你已经中断了与他们的通信。因此,你没有办法在不阻止所有使用同一密码的客户端的情况下阻止对某一特定客户端的访问。  

高熵令牌是一个更好的选择,它代表了一种更安全的认证形式,正如我们将看到的,授权。这个想法是由服务器根据用户名/密码凭证的初始认证请求来发行令牌。从那时起,客户只需发送令牌,所以净结果是大大减少了在网络上来回穿梭的用户名/密码凭证。  另外,令牌通常有一个有效期,甚至可以被撤销。此外,由于它们是唯一地发给每个客户的,当你选择撤销一个特定的令牌或如果它过期,其他客户都不会受到任何影响。  

数字签名

在我们参与的民事、法律甚至个人交易中,当有必要时,我们人类会签署各种各样的文件。这是一个我们用来建立交易真实性的机制。数字***过使用 数字签名 来模仿这一点。这个想法是让客户通过使用一些算法和一个秘密代码来产生一个签名。服务器应该应用同样的算法和一个秘密代码来产生它自己的签名,并比较其中的信息。