简而言之:如何在微服务架构中验证和授权基于角色的用户?
龙:假设你有下面给出的架构。
我正在努力寻找保护这样一个架构的最佳实践解决方案。
当我搜索时,我得到很多不同的答案。
“将身份验证留给第三方OAuth提供程序”。这似乎为一个相当简单的应用程序增加了很多开销和复杂性,并且可能不希望将身份验证和授权委托给第三方。
“使用JWT”。如果我是正确的,那么jwt令牌的使用不适合外部使用(比如在spa中)。
“使用外部不透明令牌和内部链接在redis/memchache中的jwt的组合”。对于我的给定情况,这似乎是最好的解决方案,但我的问题是缺少对库/代码示例的实际引用。
如果有人提到我正在努力实现的实际实现,我会非常高兴地告知他们:
身份验证,基于角色的授权,在微服务架构中。
node.js - 如何在微服务架构中进行身份验证和授权-LMLPHP

最佳答案

没有足够的信息表明您应该如何处理体系结构wrt身份验证和授权,但我可以告诉您我倾向于依赖的方法之一。
遵循oauth,因为它给了您很多选择,您可以从自己的idm/iam开始,以后可以通过社交平台进行连接。
我们从jwt开始,在很大程度上它只是一个签名的令牌(稍后我们转移到签名和加密的令牌)。我们创建了一个服务,负责处理身份验证和创建jwt令牌。(我们开始使用keycoplot,但后来由于keycoplot对于我们的用例来说体积很小,所以转到了自己的服务)
当你说外部的时候,我不确定你说的是什么意思,如果终端用户可以访问imo,我们可以只使用一个签名的令牌。是的,所有信息对用户都是可见的,但这是他的所有信息和一些与授权相关的信息。
如果你把你的令牌传递给一个在你的边界之外的人,一个真正的外部系统,在那里你不想共享使用信息,你可以考虑加密它,但是,从安全的角度来看,你需要考虑很多事情,因此,要么选择一个标准的安全平台,要么选择一个第三方提供商(你们双方都可以信任,并且在安全方面有足够的考虑),从长远来看,这对你是有帮助的。
使用不透明令牌和jwt的组合可能是一种过火的做法,除非您有非常有力的理由反对它。如果需要的话,可以使用jwt来加密它。您只需要再多一个服务来管理身份验证、创建和签名令牌,您应该做得很好。

关于node.js - 如何在微服务架构中进行身份验证和授权,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52349986/

10-12 03:37