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

Authentication and Authorization in Microservices

我最近阅读了一些关于微服务的文章,尤其是关于 AuthN 和 AuthZ 的文章。在大多数情况下,这一切都很有道理,我可以看到它应该如何运作。

对于我正在玩的东西,我使用委托授权 - 所以我要将令牌从客户端传递到服务,然后将相同的令牌从服务传递到服务。我在 OAuth2 服务上也有一个端点,它将接受令牌和 return 令牌的详细信息 - 用户 ID、有效期的开始和结束、令牌的有效范围等。

我 运行 遇到的问题是 - 为了正确颁发令牌,需要与用户服务进行一些通信以确保令牌所针对的用户实际上是有效的。为了验证令牌,需要与用户服务进行一些通信以确保用户仍然有效。然而,为了安全地与用户服务通信以获取有关用户的详细信息,需要一个令牌来授予此访问权限。

我假设有一些关于如何解决 OAuth2 和用户服务之间的循环依赖的标准做法,但我根本没有看到任何提及。这是个常见的问题吗?或者我只是错过了一些明显的东西?

(注意 - 现在我只实施客户端凭据授予和资源所有者密码凭据授予,因为我只是四处看看它是如何工作的,而且使用 cURL 调用它们更容易。我不我知道这有什么不同)

是的,这是一个先有鸡还是先有蛋的问题。不确定您对授权服务器有多少控制权,但解决此问题的一种方法是使用 client certificates.

保护对用户信息服务的调用

另一种是将用户信息服务和授权服务器合并为一个服务,不需要一起调用。