Security 混合面向服务的体系结构安全性和业务逻辑

Security 混合面向服务的体系结构安全性和业务逻辑,security,logic,soa,Security,Logic,Soa,我有一个大量使用nonce(即一次性一次性安全令牌)的SOA 我的应用程序从客户端获取一个nonce,验证它,然后将一个新的nonce作为每个回复的一部分发送回所述客户端。每个回复中还包括在nonce经过身份验证后立即执行的业务逻辑操作的结果 nonce验证和生成在操作上与业务逻辑相耦合,因为它们都是响应每个客户机请求而发生的。然而,我不希望这两者在代码中耦合。根据SOA原则划分它们的正确方法是什么?将安全性和业务逻辑分成两个独立的服务,其中一个调用另一个作为每个客户端请求的答复的一部分,这是否

我有一个大量使用nonce(即一次性一次性安全令牌)的SOA

我的应用程序从客户端获取一个nonce,验证它,然后将一个新的nonce作为每个回复的一部分发送回所述客户端。每个回复中还包括在nonce经过身份验证后立即执行的业务逻辑操作的结果


nonce验证和生成在操作上与业务逻辑相耦合,因为它们都是响应每个客户机请求而发生的。然而,我不希望这两者在代码中耦合。根据SOA原则划分它们的正确方法是什么?将安全性和业务逻辑分成两个独立的服务,其中一个调用另一个作为每个客户端请求的答复的一部分,这是否太过分了?

我认为您上面概述的内容符合SOA原则。您将保持两组不同的操作分离—一旦服务具有业务逻辑,另一个具有安全逻辑


如果您拥有(或有可能拥有)其他依赖nonce的服务,则情况尤其如此。

是的,将它们分开是有意义的。但我认为他们根本不应该互相了解(直接给对方打电话)

我将深入探讨一个具体的示例和技术,说明如何实现类似的功能

在web框架Struts2中,所有传入的请求在到达用户定义的对象(称为操作)之前都会经过一个操作堆栈(称为拦截器)。然后,该操作将访问业务层

提交web表单时会出现双重提交的问题。因此,防止这种情况发生的一种方法是使用随表单提交一起发送的令牌。因此,我们需要创建一个唯一的令牌,将其作为一个隐藏字段放置,然后当我们收到请求时,仅在令牌良好的情况下处理它。这可以防止用户多次不小心购买某些东西

在Struts2中有一个特殊的服务器端令牌标记,它为我们创建隐藏字段。因此,每种形式都需要做一些事情。令牌拦截器(如果处于活动状态)将强制该值始终存在,并且在接收表单时是良好的,并且将重定向不在其他地方的响应

实现一个nonce拦截器/过滤器来检查传入的nonce值是否正确,并为响应添加正确的nonce值的想法应该完全独立于业务逻辑

这里的例子是html表单,但是添加一个拦截器(或者您为适当的技术称之为“在请求/响应级别处理横切关注点的拦截器”)将这样的值添加到json或xml消息应该非常容易,并且可能会产生最优雅的结果

以下是struts2拦截器参考的链接(它可能会更好地阐明这个想法):

以下两个链接都是管理令牌的拦截器:


我希望每个链接的前几段会有用,但对于您的技术来说,类似的内容应该很好

昨晚让我睡不着的问题。任何人都可以回答。我需要两个nonce,一个用于操作A和操作B。A和B可以由同一个客户端请求,但独立发生。A和B由业务服务处理。根据定义,nonce应该由安全服务提供。我的问题是,如何在不混合服务的情况下做到这一点?也就是说,业务服务如何确保A和B被授权,而不知道nonce?或者,安全服务如何在不知道需要来自同一客户端的两个独立业务操作的情况下完成其工作?每个令牌仅在每个请求-响应中使用一次。所以你应该能做很多手术A,B。。。都能够自动插入这些唯一的令牌。假设您正在交换json/XML消息。假设您的业务逻辑用于生成一个对象,然后将该对象序列化为json/xml。您的安全令牌生成器/验证器应该是发送回响应的部分。它将看到json/xml消息,并添加安全信息对其进行修改。与接收请求相同,应该有不安全的服务和安全的。不安全是指允许您登录并启动令牌/nonce周期(或其他公共服务)的服务,在此之后,只有在nonce有效时才能访问受保护的服务。谢谢。请参阅我对Tim的补充意见。