【问题标题】:SOA Service Design / AuthenticationSOA 服务设计/认证
【发布时间】:2009-08-18 20:55:06
【问题描述】:

我对 SOA 还比较陌生,因此正在尝试。

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

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

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

  1. 每个服务都会询问身份验证服务会话是否有效,如果有效,用户的角色是什么。身份验证服务会在数据库中查找并做出相应的回复。

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

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

我认为第一种方法对身份验证服务/数据库造成了太大的压力,但实施起来却最少。

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

第三个实现起来稍微复杂一些,但会减少响应时间,因为不会发生对身份验证服务的访问。但是,如果会话信息过多,这种方法就会失败,并且很难提供可扩展性。

【问题讨论】:

    标签: authentication soa


    【解决方案1】:

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

    1. 身份验证服务向服务客户端颁发令牌。
    2. 服务客户端将令牌包含在用 WS-Security 或类似内容包装的 SOA 消息中。
    3. 该服务应在提供服务之前使用身份验证服务验证令牌。

    对于外部服务,我建议您查看联合解决方案,例如 SAML

    【讨论】:

    【解决方案2】:

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

    【讨论】:

    猜你喜欢
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    相关资源
    最近更新 更多