在企业应用程序(EAI)中存储用户凭据的位置?

时间:2011-02-09 10:25:20

标签: java notifications credentials store

背景/背景

我们正在开发事件通知服务。高级别的应用程序如下所示: high level flow

我们的开发范围涉及小部件和ENS。

ENS ”充当用户感兴趣的某些类型事件的集中点。 任何想知道何时发生这些类型事件的用户都会注册ENS, 它按顺序识别事件并将通知与订阅匹配。

想要subcibe的用户应该是集成应用程序的有效用户(db,sap system等)

事件顺序:

enter image description here

现在我的问题是:

存储Users db,sap等凭据的最佳实践是什么。

修改 用户应该多久进行一次身份验证?应该是每次传递消息吗?(正如@duffymo提到的,如果我使用这个策略,它会影响源系统)

其他信息:ENS是网络服务。

ENS轮询SAP(和其他应用程序),这就是问题变得更加复杂的地方。 在SAP中,存在数据级授权。因此,并非所有用户都可以查看所有事件/数据。

如果SAP已推送数据以及有权查看的用户信息,则根本没有问题。

案例1:调度程序由ENS启动

  1. 用户订阅订阅。在订阅时,将在SAP系统中检查用户的授权。如果没问题,那么他将被允许进行订阅。
  2. 调度程序在预定时间运行。
  3. 调度程序识别订阅的用户。
  4. 如果发生事件,调度程序将使用存储的用户凭据(在ENS中执行)进行POLL。
  5. 如果有更改,请通知用户。
  6. Disadvs here:

    • 用户凭据存储在某处 外部 - 安全团队可能不会 接受它
    • 如果有多个用户,还原剂会命中 订阅了相同的一块 信息

    案例2:调度程序由WIDGET引导。用户信用卡仅存储在用户本地计算机中。 迪亚德夫:

    • 如果订阅是每天,如果是 用户系统/小部件未启动。该 用户可能会错过通知 发生在周末的事情上。
    • 如果更多,还原剂会点击服务器 超过一个用户订阅了 相同的信息。

4 个答案:

答案 0 :(得分:3)

通常是应用程序为数据库,SAP等提供凭据。个人用户将凭证存储在LDAP或数据库中;身份验证和授权将作为应用程序,EAI服务器或SiteMinder等设备的交叉关注点处理。

将拦截传入的请求并检查授权令牌。如果未出现令牌,请检查身份验证和授权。如果允许,请创建授权令牌并对其进行缓存。

这是Web应用程序的常用方案。对于像您这样的事件通知情况,它更复杂。您必须在用户订阅时检查授权。如果用户未经授权,您应立即通知他们,因为您不希望每次发布时都必须检查凭据。用户,订阅事件和授权凭证之间必须存在关联。

我只看到一个问题。

如果他们订阅某个活动,发现他们已获得授权,接收第一个广播,然后由于某种原因而变得未经授权,您可以向未经授权的用户广播事件。这表明您每次向订阅者广播时都必须检查凭据。这可能会变得繁重,并且会减慢您的应用。

查看SAML等标准,了解它是否对您有所帮助。

缓存问题取决于事件之间的时间与授权更改之间的比较。如果事件之间的时间长于授权更改,则必须每次检查,因为您无法知道自上次事件以来授权是否已被撤销。

答案 1 :(得分:1)

我看到这种模式最经常实现的方式是授权发生在订阅而不是后端。主题层次结构反映了后端应用程序的安全模型。如果后端具有查询Produce,Deli和Grocery的功能,则存在具有相同分类的主题节点。在Grocery后端系统中获得授权的用户也被授权参加Grocery主题。可以定期导出后端系统中的授权(通常是每晚),并将其转换为发布/订阅代理的授权设置。在一个实现中,我在后端系统上工作,将在一个安全的管理主题上向pub / sub代理发布授权更改,以便用户授权可以近乎实时地保持最新。

将凭证传递回源系统的概念乍一看听起来很安全,但是在更深层次的检查中存在一些问题。首先,您打算如何扩大规模?我从未见过成功的事件通知系统没有得到大量重用。每个后端系统对身份验证都有不同的要求,通常是不同的凭据,不同的有效性和缓存要求等。构建系统以将凭证流回到几个后端应用程序是一回事。做10或20是一场噩梦。

假设您解决了上述问题,您现在已经在一个位置缓存了一半后端企业系统的用户凭据。如果那个中央系统受到损害,它所谈到的所有后端系统也会受到损害。该中央系统刚刚成为企业中最关键的安全焦点。解决这个问题所需的严重安全措施代价高昂。

是的,让主题树和pub / sub代理的授权镜像后端应用程序的安全模型是一件很痛苦的事。但最终它比设计足够安全的中央代理服务来存储所有凭据并且能够跨多个后端系统验证它们而不会阻碍代理或发布的源系统更容易(并且成本更低)它。

答案 2 :(得分:0)

在您在问题中描述的设置中,您必须构建一种清除消息队列的方法。例如,当订户遇到问题并停止接收消息时会发生什么,或者如果意外地某些格式错误的消息出现在订阅主题上会发生什么,并且这些消息会导致客户端收到崩溃消息。这就是为什么您的系统必须具有一些删除消息的管理功能的原因。您可以重复使用此管理功能来触发用户已从外部系统删除的消息到ENS,此用户删除的消息将导致用户通知队列被清空并且其订阅将变为无效。

您可以用来处理删除用户的外部系统上的情况的另一件事是让来自外部系统的通知消息具有到期时间。例如,SAP通知消息可能在创建时间后2小时内有效。如果用户在2小时内未收到消息,则会删除该消息。如果将消息过期与来自SAP的通知消息组合在一起,用户不再有效,那么您可以知道存在用户无效的时间限制。

我认为如果您提供有关您用于实施ENS的技术的更多背景信息,那么我们可能会为您提供更具体的答案。

答案 3 :(得分:0)

LDAP将是一个更好的存储选择,它既安全又快速又便携

* 编辑:便携式访问您的企业应用程序。