我有多种服务:
- 用户
- 邮政
- 评论
- 验证
- GraphQL 端点
假设它们像这样连接在一起:
所有服务都通过封闭网络上的 gRPC 进行通信,并且使用 jwt 令牌完成授权
方法 1:graphql 服务负责用户身份验证并确保用户有权运行指定的程序。服务之间没有用户认证,但是有TLS认证。服务不进行授权检查。
方法 2:每个单独的服务确保用户被授权运行特定的过程。一个示例可能是在您需要登录并拥有超过 15 名声望的帖子上投票。在这里,Post 服务负责检查用户是否已登录(已通过身份验证)以及是否有权投票。这将导致大量开销,因为每个过程调用都需要通过 Auth 服务检查用户身份验证和授权。
是否有更好的方法仍然保留方法 2 的安全性,但会产生像方法 1 一样的小开销?
- - -更新 - - -
方法 3:与方法 2 相同,但用户身份验证仅在使用 Auth 服务的 GraphQL 服务中完成。通过检查传递的元数据来完成授权。并且服务之间有 TLS 身份验证。