文档章节

Spring cloud 微服务安全解决方案

netkiller-
 netkiller-
发布于 2017/10/21 15:56
字数 1088
阅读 1325
收藏 54

Spring boot 微服务安全解决方案

作者:netkiller

本文节选自《Netkiller Architect 手札》

Restful 的通信安全有很多中解决方案,例如

    1. HTTP Basic Auth 认证
    2. Cooke / Session 认证
    3. Token 认证
    4. Oauth
    5. OpenID

等等

每一种方案都很成熟,这里不依依解释,如果不了解,请去搜索引擎查找相关资料

这里我谈谈在实施微服务项目中的心得,首先项目采用 Spring cloud 方案,Spring cloud 有自己的RestController 控制器,我们需要遵循他的规范开发,这就限制了很多传统的认证加密方法不能应用到 Spring cloud中。

例如传统restful 使用 POST 方式提交,POST 数据格式如下:
 name=Neo&age=23&md5=xxxxxxx  
然后做 token 校验。

而 Spring cloud 使用 raw 格式的数据做POST提交,例如
@RequestMapping(value = "/member/create", method = RequestMethod.POST)  
public void create(@RequestBody Member member)
我们不想在Spring框架上做额外的改动,又想解决信息的安全问题。

应用层加密与传输层加密,我更趋向传输层加密。

因为应用层加密也破坏了 Spring cloud的风格,应用层加是指通过非对称密钥将数据加密,然后通过POST发送到服务器端,服务器端获取数据后解密,在反序列化。这种做法有很多缺陷:

  1. 需要用户自己处理加密与机密
  2. 加密数据通常需要BASE64编码后传输,增加了数据体积。
  3. 不同语言间处理方式存在差异,略有不同。例如有些系统使用JKS格式的证书,有些使用PEM,P12 等等。需要开发者自己转换,比较复杂。

而传输层加密由Web服务器完成,与开发无关。

 

第一个阶段采用 HTTP Basic Auth

这个方案简单,实施起来最为方便,因为项目比较紧急,所以就采用了这个方案,这个方案既可以在运维方处理,也可以在开发方处理,对于 Spring boot 只需引入Spring Security 简单配置,立即生效。

实现方式请参考:

Spring boot with Spring security

http://www.netkiller.cn/java/spring/boot/security.html

第二阶段 HTTP Basic Auth + SSL

上面的方案适合在防火墙内部的服务器间通信,如果跨机房或者在广域网上就不在安全了,通过嗅探器抓包,包括 http basic auth 的用户和密码,以及接口数据没有安全可言。
为Web 服务器增加 SSL 证书,可以解决信息安全问提。

证书可以使用CA机构颁发的证书,也可以自己生成证书。

证书可以配置在Web服务器上如Nginx, 实现方式请参考:
http://www.netkiller.cn/www/nginx/conf.html#http2

也可以配置在 Spring boot 中, 实现方式请参考:

Spring boot with HTTPS SSL

http://www.netkiller.cn/java/spring/boot/https.html

这个方案我们使用了很长一段时间,大家都不想再改动和优化现有的项目,可以满足绝大部分用户的需求.


第三阶段 Oauth

由于需要为手机端提供 restful 服务,之前的方式已经不能满足我们的需求,之前的方式更适合提供私有服务,不适合提供公共服务。所谓私有服务是指它的使用范围限制在企业内部,或者事业部间共享服务,总的来说可以通过防火墙控制服务区域。

对于公共服务 OpenID/Oauth 更适合,我们不关心用户地理位,终端设备的情况。实现方式请参考:

实现方式请参考:

Spring boot with Oauth2

http://www.netkiller.cn/java/spring/boot/oauth2.html

第四阶段,终极版诞生,SSL使用双向认证

这样就具备了:

    1. SSL 双向认证
    2. HTTP Basic Auth 认证
    3. Oauth2 认证

这是我们最终的方案,双向认证是服务器与客户端两端都需要证书才能通信。
App(IOS/Android) -->  SSL 双向认证 --> SLB/Proxy --> Feign Client 

 

 

© 著作权归作者所有

共有 人打赏支持
netkiller-

netkiller-

粉丝 691
博文 259
码字总数 353246
作品 10
深圳
部门经理
私信 提问
加载中

评论(3)

哎码
哎码
依依是谁?
哎码
哎码
依依是谁?
哎码
哎码
依依是谁?
微服务开发架构——Spring Cloud常见问题与总结Turbine 聚合数据不完整

个人GitHub地址:https://github.com/leebingbin/ 在使用Spring Cloud的过程中,难免会遇到一些问题。所以对Spring Cloud的常用问题做一些总结。 三、Turbine 聚合数据不完整 在某些版本的S...

Mr_ET
2017/11/01
0
0
spring cloud微服务分布式云架构 - Spring Cloud简介

Spring Cloud是一系列框架的有序集合。利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如服务发现、注册、配置中心、消息总线、负载均衡、断路器、数据监控等(这里只简单的列了...

明理萝
11/01
0
0
(一)构建spring cloud微服务分布式云架构 - Spring Cloud简介

Spring Cloud是一系列框架的有序集合。利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如服务发现、注册、配置中心、消息总线、负载均衡、断路器、数据监控等(这里只简单的列了...

SpringCloud关注者
09/26
360
1
(一)spring cloud微服务分布式云架构-Spring Cloud简介

Spring Cloud是一系列框架的有序集合。利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如服务发现、注册、配置中心、消息总线、负载均衡、断路器、数据监控等(这里只简单的列了...

itcloud
11/22
0
0
关于Spring Cloud的核心特性

SOA和微服务的区别 其实服务化架构已经可以解决大部分企业的需求了,那么我们为什么要研究微服务呢?先说说它们的区别; 微服务架构强调业务系统需要彻底的组件化和服务化,一个组件就是一个...

itcloud
05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

深入解析JSON与XML优缺点对比

本文从各个方面向大家对比展示了json和xml的优缺点,十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 #1. 定义介绍 1.1 XML定义 扩展标...

前端攻城老湿
11分钟前
0
0
Vue 单页应用(spa)前端路由实现原理

一文搞懂单页应用原理Vue项目History模式路由机制 源码分析VueVueRouter Vue 单页应用(spa)前端路由实现原理 写在前面:通常 SPA 中前端路由有2种实现方式: window.history location.hash...

前端攻城小牛
12分钟前
0
0
Vuex的初探与实战小结

1.概述 每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。 Vuex 和单纯的全局对象有以下两点不同: 1.Vuex 的状态存储是响...

peakedness丶
14分钟前
0
0
CSS 背景图片全屏显示

<style> html { background: url(./static/login/xia.jpg) no-repeat center center fixed; -webkit-background-size: cover; -moz-background-size: cover; ......

SummerGao
17分钟前
0
0
Supplier函数式接口

Supplier接口的不传入参数,返回一个值。真是一个无私奉献的接口,还没有default方法。 下面就想用一个接口试试,其实我本来用的是IntSupplier,但是发现在使用方法引用的时候,不好把Math....

woshixin
32分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部