SOA服务设计/认证

时间:2009-08-18 20:55:07

标签: authentication soa

我对SOA很陌生,因此需要进行实验。

目前,给我带来最大问题的部分是身份验证,我目前对此的想法涉及以下内容:

客户端向身份验证/用户服务发送某种身份验证消息,此服务查询数据库,如果找到用户且密码有效,它将以会话ID响应,此ID将在所有用户中使用此客户的进一步要求。

这对我来说似乎还不错,但我不知道如何处理对其他服务的请求,我想到了三种不同的方法。

  1. 如果会话有效,每个服务都会询问身份验证服务,如果是,则询问用户所处的角色。身份验证服务在数据库中查找并相应地进行回复。

  2. 身份验证服务将所有会话信息保存在ram中,并在没有db往返请求的情况下响应。

  3. 身份验证服务向esb发送授权消息,esb将此授权消息转发给每个服务,这些服务将其缓存。不需要进一步请求身份验证服务。如果用户注销或他的角色发生变化,则会发送另一条消息并由所有服务进行处理。

  4. 我认为第一种方法会对身份验证服务/ db造成太大压力,但实施起来的工作量最小。

    第二个仍然很容易实现,但对身份验证服务的压力几乎保持不变。

    第三个实现起来有点复杂,但由于没有访问认证服务,因此会减少响应时间。但是,如果有太多的会话信息,这种方法就会失败,并且很难给出可扩展性。

2 个答案:

答案 0 :(得分:5)

如果所有服务都是内部的,那么最佳方法应该是这样的,

  1. 身份验证服务向服务客户端发出令牌。
  2. 服务客户端包含WS-Security中包含的SOA消息中的令牌或类似的东西。
  3. 服务应在提供服务之前使用身份验证服务验证令牌。
  4. 对于外部服务,我建议您查看SAML等联合解决方案。

答案 1 :(得分:3)

不要过早优化。您的选项没有。您承认的3将更加复杂,实施是不必要的。选择选项号。 2如果这是你可以快速实施的。您可以稍后进行配置并进行更改,但我会打赌,在使用选项2时,您不会遇到“瓶颈”。