Authentication 微服务中的认证和授权

Authentication 微服务中的认证和授权,authentication,oauth-2.0,authorization,microservices,Authentication,Oauth 2.0,Authorization,Microservices,最近我读了很多关于微服务的文章,尤其是关于AuthN和AuthZ。在大多数情况下,这一切都是有道理的,我可以看到这一切应该如何运作 对于我正在玩的东西,我使用委托授权——因此我将在客户端和服务之间传递令牌,然后在服务和服务之间传递相同的令牌。我在OAuth2服务上还有一个端点,它将接受令牌并返回令牌的详细信息——用户ID、有效期的开始和结束、令牌有效的范围等等 我在这里遇到的问题是——为了正确地发出令牌,需要与用户服务进行一些通信,以确保令牌所针对的用户实际上是有效的。为了验证令牌,需要与用户服

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

对于我正在玩的东西,我使用委托授权——因此我将在客户端和服务之间传递令牌,然后在服务和服务之间传递相同的令牌。我在OAuth2服务上还有一个端点,它将接受令牌并返回令牌的详细信息——用户ID、有效期的开始和结束、令牌有效的范围等等

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

我假设有一些关于如何解决OAuth2和用户服务之间的循环依赖关系的标准实践,但我没有看到任何关于它的提及。这是一个普遍的问题吗?还是我错过了一些明显的东西


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

是的,这是一个鸡和蛋的问题。不确定您对授权服务器的控制程度,但解决此问题的一种方法是使用保护对用户信息服务的调用


另一种方法是将用户信息服务和授权服务器合并到一个服务中,这样就不需要同时打电话了。

这是一个宠物项目,所以我可以完全控制它。我只是在玩和学习:)将这些服务组合在一起我很不愿意,因为它们是不同的关注点,但是客户端证书选项可以工作,或者以其他方式表明这是一个内部调用。我假设这是一个已经解决的问题-其他人肯定碰到了完全相同的东西-但我找不到任何关于它的东西…如果你控制双方,你当然也可以让你的授权服务器为自己生成一个令牌来调用用户信息服务。所以-客户端调用oauth,oauth生成一个短期令牌并使用它调用用户服务,然后用户服务调用回oauth以验证令牌,oauth只是隐式信任它,让它继续,然后用户服务继续并执行工作。我有点喜欢。仍然存在一些更细粒度的authz问题,但这并不太糟糕……用户服务不需要回调auth服务。JWT令牌是数字签名的,可以在不返回颁发者的情况下进行验证。但前提是每个服务都有签名密钥的副本,否则任何第三方都可以生成作为有效令牌传递的令牌。