微服务和用户之间的授权

Posted

技术标签:

【中文标题】微服务和用户之间的授权【英文标题】:Authorization between micro services and users 【发布时间】:2018-10-12 12:53:22 【问题描述】:

处理微服务和用户之间的访问和授权的最佳方式是什么?

我正在构建一个基于微服务架构的应用程序。服务通过 REST 相互通信。有些端点只能由其他微服务访问,而不能由用户直接访问,有些端点是公共的,有些需要用户注册或拥有管理员权限。最重要的是,用户将拥有管理员和普通用户等角色。

我正在尝试确定 Oauth2 和范围是否是我想要实现的最佳方法。例如每个微服务都将拥有“用户”,这些“用户”在“service1-place-order”等特定范围内具有权限。

【问题讨论】:

【参考方案1】:

是的,Oauth2 是正确的方法

您必须实现一个授权服务器,该服务器将授予您访问令牌,并且您将在此授权服务器中注册客户端、用户和范围,您的微服务将用作资源服务器、您希望向某些用户公开的端点某些权限将使用@preauthorize(hasScope('readThis') && hasAuthority('admin') 进行注释,类似地,您可以限制其他端点,资源服务器将使用身份验证服务器对令牌进行身份验证,因此您必须维护 inMemoryTokern 存储或 jdbc 令牌商店,

如果您想在访问令牌中获取一些信息,比如组织等,也可以实现 jwt,这样您还可以节省从资源服务器到身份验证服务器的额外调用以验证令牌,并且您不必将令牌存储在内存或 jdbc 存储

【讨论】:

以上是关于微服务和用户之间的授权的主要内容,如果未能解决你的问题,请参考以下文章

微服务之间的访问令牌/授权

微服务架构中的授权/认证

如何将用户角色从授权服务器复制到下游微服务?

微服务内部调用不认证用户

如何授权微服务内部通信?

SpringCloud 微服务应用安全——Security