微服务认证/授权架构

时间:2019-02-02 11:13:33

标签: database reactjs architecture microservices

ARCHITECTURE

需要知道如何为给定体系结构中的每个微服务授权用户。即拒绝请求,每个微服务,如果他们没有被授权具有该模块为每个用户的数据在主数据库。

我还需要在每个微服务数据库之间共享主数据库中的用户,以保持数据完整性。

有没有办法做到这一点?还是我需要在每个微服务中重新创建一个用户表?基本上,这意味着每次用户想要访问微服务时,都必须在微服务中创建一个新用户(来自主api的POST)(这会丢失数据完整性)。

我还没有尝试任何事情找建议/坚实和安全的体系结构。每个微服务都将托管在同一PAAS上的子域中,以避免传输攻击并减少延迟。

1 个答案:

答案 0 :(得分:1)

  

拒绝请求给每个微服务,如果他们没有被授权具有模块按照用户数据在主分贝。

假设使用的是OAuth2.0JWT访问和刷新令牌,则可以使用JWT的“AUD”权利要求令牌携带的授权或权利或许可访问个别微服务。在“AUD”要求,可以提供个性化的服务URL,或服务ID用户被授权访问。在单个微服务(或OAuth术语中的资源服务器)上,您需要检查JWT是否在其“ aud”声明中带有特定的微服务UR或id。否则,访问将被拒绝。

  

我还需要在每个微服务数据库之间共享主数据库中的用户,以保持数据完整性。

通常不是这样。

您通常有一个授权服务器。那就是所有用户信息的掌握者。试图访问任何服务的任何未认证的用户会被重定向到授权服务器,并要求验证后自行提供他们的授权。身份验证完成并获得授权后,将使用适当的访问和刷新令牌将用户重定向到服务页面,此后该令牌将伴随所有用户请求。即使请求来自User A -> Service B -> Service C。然后,服务B和C需要检查:

  1. 是智威汤逊有效(不被任何人篡改)? (在JWT中使用数字签名-通常为HMACSHA256)
  2. 根据授权服务器在JWT的“ exp”声明中设置的到期日期和时间,访问令牌(通常是JWT)是否仍然有效?
  3. “ aud”声明中是否存在服务URL或ID?

如果所有3个问题的回答均为“是”,则授予访问权限,并且每个服务都可以从JWT的“ sub”声明中找到用户名。用户名可以作为审核记录日志

我还建议您阅读this answer