我对 SOA 比较陌生,因此在进行试验。
目前,对我造成最大问题的部分是身份验证,我目前的想法涉及以下内容:
客户端向身份验证/用户服务发送某种身份验证消息,该服务查询数据库,如果找到用户并且密码有效,它将使用会话 ID 进行响应,该 ID 将用于所有进一步的请求这个客户。
这对我来说似乎相当不错,但我不知道应该如何处理对其他服务的请求,我想到了三种不同的方法。
每个服务都会询问身份验证服务会话是否有效,如果有效,用户所在的角色。身份验证服务会在数据库中查找并做出相应的回复。
身份验证服务将所有会话信息保存在 ram 中,并在没有 db 往返请求的情况下进行响应。
身份验证服务向 esb 发送授权消息,esb 将此授权消息转发给每个服务,并且这些服务将其缓存。不再需要对身份验证服务的进一步请求。如果用户注销或他的角色发生变化,另一条消息将被发送并由所有服务处理。
我认为第一种方法对身份验证服务/数据库造成了太大的压力,但实施起来却最少。
第二个仍然很容易实现,但对身份验证服务的压力几乎保持不变。
第三个实现起来稍微复杂一些,但会减少响应时间,因为不会发生对身份验证服务的访问。但是,如果会话信息过多,这种方法就会失败,并且很难提供可扩展性。