Spring boot 开发的微服务相互间的调用通信用什么方式保证安全

一. 背景

微服务架构下,我们的系统根据业务被拆分成了多个职责单一的微服务。

每个服务都有自己的一套 API 提供给别的服务调用,那么如何保证安全性呢?

不是说你想调用就可以调用,一定要有认证机制,是我们内部服务发出的请求,才可以调用我们的接口。

需要注意的是我们这边讲的是微服务之间调用的安全认证,不是统一的在 API 官网认证,需求不一样,API 网关处的统一认证是和业务挂钩的,我们这边是为了防止接口被别人随便调用。

二. 方案

OAUTH2

Spring Cloud 可以使用 OAUTH2 来实现多个微服务的统一认证授权

通过向 OAUTH2 服务进行集中认证和授权,获得 access_token

而这个 token 是受其他微服务信任的,在后续的访问中都把 access_token 带过去,从而实现了微服务的统一认证授权。

JWT

JWT 是一种安全标准。基本思路就是用户提供用户名和密码给认证服务器,服务器验证用户提交信息信息的合法性;如果验证成功,会产生并返回一个 Token,用户可以使用这个 token 访问服务器上受保护的资源。

感觉这 2 种好像没多大区别呀,其实是有区别的:OAuth2 是一种授权框架 ,JWT 是一种认证协议

无论使用哪种方式切记用 HTTPS 来保证数据的安全性。

三. 用哪种

常用用建议用 JWT, 轻量级,简单,适合分布式无状态的应用

用 OAUTH2 的话就麻烦点,各种角色,认证类型,客户端等等一大堆概念

  
    展开阅读全文