【问题标题】:Authentication and Authorization in Microservices微服务中的身份验证和授权
【发布时间】:2015-10-14 23:00:46
【问题描述】:

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

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

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

我认为在如何解决 OAuth2 和用户服务之间的这种循环依赖方面有一些标准做法,但我根本没有看到任何提及它。这是个常见的问题吗?还是我错过了一些明显的东西?

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

【问题讨论】:

    标签: authentication oauth-2.0 authorization microservices


    【解决方案1】:

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

    另一种是将用户信息服务和授权服务器合二为一,无需调用。

    【讨论】:

    • 这是一个宠物项目,所以我可以完全控制它。我只是在玩和学习:) 将服务组合在一起我不愿意这样做,因为它们是不同的问题,但是客户端证书选项可以工作,或者以其他方式表明它是内部调用。我假设这是一个已解决的问题 - 其他人一定遇到了完全相同的事情 - 但我找不到任何关于它的信息......
    • 如果你控制双方,你当然也可以让你的授权服务器为自己生成一个令牌来调用用户信息服务。
    • 所以 - 客户端调用 oauth,oauth 生成一个短暂的令牌并使用它来调用用户服务,然后用户服务回调 oauth 以验证令牌,oauth 只是隐式信任它,让我们开始吧,然后用户服务进行工作。我有点喜欢这样。仍然有一些更细粒度的身份验证问题,但这还不错......
    • 用户服务无需回调鉴权服务。 JWT 令牌经过数字签名,无需返回颁发者即可进行验证。
    • 只有当每个服务都有一个签名密钥的副本,否则任何第三方都可以生成一个有效的令牌。
    猜你喜欢
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 2017-12-17
    • 2020-10-21
    • 2017-07-11
    相关资源
    最近更新 更多