database - 微服务认证/授权架构

标签 database reactjs architecture microservices

ARCHITECTURE

需要知道如何为给定架构中的每个微服务授权用户。 IE。如果根据主数据库中的用户数据,他们未被授权拥有该模块,则拒绝对每个微服务的请求。

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

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

我还没有尝试任何东西来寻求建议/可靠且安全的架构。每个微服务都将托管在同一 PaaS 上的子域上,以避免传输攻击并减少延迟。

最佳答案

deny requests to each microservice if they are not authorised to have that module as per user data in the main db.

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

I also need to share the user from the main db between each microservice db to maintain data integrity.

这通常不是这样做的。

您通常有一个授权服务器。那是所有用户信息的主人。任何试图访问任何服务的未经身份验证的用户都将被重定向到授权服务器,并要求在对自己进行身份验证后提供授权。一旦身份验证完成并获得授权,用户将被重定向到具有适当访问和刷新 token 的服务页面,此后将伴随所有用户请求。即使请求来自 User A -> Service B -> Service C。然后服务 B 和 C 需要检查:

  1. JWT 是否有效(未被任何人篡改)? (在 JWT 中使用数字签名——通常是 HMACSHA256)
  2. 根据授权服务器在 JWT 的“exp”声明中设置的到期日期和时间,访问 token (通常是 JWT)是否仍然有效?
  3. 服务 URL 或 ID 是否出现在“aud”声明中?

如果这 3 个问题的答案都为"is",则授予访问权限,并且每个服务都可以从 JWT 的“sub”声明中找到用户名。用户名可以被记录以供审计

我还建议您阅读 this answer .

关于database - 微服务认证/授权架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54492493/

相关文章:

reactjs - 如何将 React bootstrap NavBar 向左对齐

数据库 - 软删除或分离的日志表

CakePHP - 放置服务逻辑的位置

mysql - 连接 4 个 SQL 表,3 个源 1 'container'

mysql - 将 Ruby Rails 连接到 MySQL 数据库

node.js - 我们可以使用 postgresql 的解析服务器吗

javascript - react : Component re-renders only when method is finished

javascript - React 生命周期方法的类属性

c++ - 静态库、动态库、DLL、入口点、头文件……如何活着摆脱这个?

database - 在多个 postgresql 集群中创建角色