微服务架构中的身份验证和授权

时间:2018-03-24 20:28:44

标签: authentication jwt graphql microservices go-micro

我有多项服务:

  • 用户
  • 注释
  • 验证
  • GraphQL端点

让我们说他们像这样联系在一起:

example 1

所有服务都通过gRPC在封闭的网络上进行通信,授权使用jwt令牌完成

方法1: graphql服务负责用户身份验证,并确保用户有权运行指定的过程。服务之间没有用户身份验证,但有TLS身份验证。服务没有进行授权检查。

方法2: 每个单独的服务都确保用户有权运行特定的过程。一个例子可能是在您需要登录并且声誉超过15的帖子上投票。在这里,邮政服务责任是检查用户是否已登录(已验证)以及是否有权投票。这将导致大量开销,因为每个过程调用都需要通过Auth服务检查用户身份验证和授权。

是否有更好的方法仍然保留方法2的安全性,但会产生类似方法1的小开销?

----- -----更新

方法3: 与方法2相同,但用户身份验证仅在使用Auth服务的GraphQL服务中完成。通过检查传递给arround的元数据来完成授权。并且服务之间存在TLS身份验证。

1 个答案:

答案 0 :(得分:1)

让我们考虑从经过身份验证的用户到服务A以及服务B的请求。应该在每个呼叫上传递JWT。

这两项服务首先验证用户,这只需通过验证JWT即可完成。然后,每个服务都会从用户中提取授权用户所需的所有信息,例如sub声明。它将使用该信息来决定用户是否被授权关于服务应代表用户执行的操作。只有在成功授权后,服务才能真正做任何事情。

这不是开销,但是必须允许服务B对用户进行身份验证和授权。没有将JWT从服务A传递到服务B将使服务B无法知道有关用户的任何信息。