如何在微服务架构中进行身份验证和授权

How to authenticate and authorize in a microservice architecture

简述:如何在微服务架构中对基于角色的用户进行认证和授权?

Long: 假设你有下面给出的架构。 我正在努力寻找保护此类架构的最佳实践解决方案。 当我搜索时,我得到了很多不同的答案。

"Leave authentication to a thirdparty OAuth provider"。这似乎为一个相当简单的应用程序增加了很多开销和复杂性,并且可能不希望将身份验证和授权委托给第三方。

"Use JWT"。如果我是正确的,那么 JWT 令牌的使用不适合外部使用(比如在 SPA 中)。

"Use a combination of opaque tokens externally and JWT internally linked in a redis/memchache"。这似乎是我给定情况的最佳解决方案,但我的问题是缺乏对 libraries/code 示例的实际引用。

如果有人对我正在尝试完成的实际实现有一些参考,我将非常感激: 身份验证,基于角色的授权,微服务架构。

没有足够的信息来建议您究竟应该如何使用身份验证和授权架构,但我可以告诉您我倾向于依赖的一种方法。

关注 OAuth,因为它给了你很多选择,你可以从你自己的 IDM/IAM 开始,然后可以通过社交平台连接。

我们从 JWT 开始,在大多数情况下它只是一个签名令牌(一段时间后我们转向签名和加密令牌)。我们创建了一项服务,负责处理身份验证和创建 JWT 令牌。 (我们从 Keycloak 开始,但后来转移到自己的服务,因为 keycloak 对于我们的用例来说体积很小)

当你说外部时,我不确定你的意思,如果最终用户 IMO 可以访问,我们可以只使用签名令牌。是的,所有信息对用户都是可见的,但这是他的所有信息和一些与授权相关的信息。

如果您将您的令牌传递给边界之外的人,传递给一个实际的外部系统,您不想在其中共享使用信息,您可以考虑对其进行加密,但是这样会有很多东西您需要从安全角度考虑,因此选择标准安全平台或第三方提供商(你们都可以信任他们,并且在保护它方面投入足够的精力)可以长期帮助你 运行.

使用不透明令牌和 JWT 的组合可能有点矫枉过正,除非您有非常充分的理由反对它。 IMO,你从一开始就保持简单,在需要时使用 JWT,如果需要加密它。您只需要再提供一项服务来管理身份验证以及创建和签署令牌,您就可以了。