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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在微服务架构中进行身份验证和授权相关的知识,希望对你有一定的参考价值。

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

Long:说你有下面给出的架构。我很难看到什么是保护这种架构的最佳实践解决方案。当我搜索时,我得到了很多不同的答案。

“将身份验证保留给第三方OAuth提供商”。这似乎为相当简单的应用程序增加了大量开销和复杂性,并且可能不希望将身份验证和授权委托给第三方。

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

“在外部使用不透明标记的组合,并在redis / memchache中内部链接JWT”。这似乎是我给定情况的最佳解决方案,但我的问题是缺乏对库/代码示例的实际引用。

如果有人对我想要实现的实际实现有一些参考,那么我会非常高兴:在微服务架构中进行身份验证,基于角色的授权。

enter image description here

答案

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

关注OAuth,因为它提供了很多选项,您可以从自己的IDM / IAM开始,然后可以通过社交平台进行连接。

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

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

如果你将你的令牌传递给你边界以外的人,到一个你不想共享使用信息的实际外部系统,你可以考虑加密它,但是你需要从安全性中考虑很多事情。因此,从标准安全平台或第三方提供商(您可以信任并且有足够的想法来保护它)的角度来看,可以帮助您从长远来看。

使用不透明令牌和JWT的组合可能是一种矫枉过正,除非你有很强的理由反对它。 IMO你可以简单地开始使用JWT,如果需要加密它。您所需要的只是一项服务来管理身份验证以及创建和签署令牌,您应该做得很好。

以上是关于如何在微服务架构中进行身份验证和授权的主要内容,如果未能解决你的问题,请参考以下文章

如何在微服务和API网关架构中对不同的配置文件进行身份验证和授权

在微服务架构中组织授权的最佳实践?

如何使用 Azure API 管理设计微服务架构中的身份验证和授权策略?

在微服务架构中组织用户和身份验证

在微服务架构的每个服务中验证访问令牌 (JWT)

如何在微服务架构中使用 3rd 方 IDP 实现 OpenID Connect 身份验证