写点什么

微服务系统中的认证策略

2016 年 12 月 12 日

软件安全本身就是个很复杂的问题,由于微服务系统中的每个服务都要处理安全问题,所以在微服务场景下会更复杂。David Borsos 在最近的伦敦微服务大会上作了相关内容的演讲,并评估了四种面向微服务系统的身份验证方案。

在传统的单体架构中,单个服务保存所有的用户数据,可以校验用户,并在认证成功后创建 HTTP 会话。在微服务架构中,用户是在和服务集合交互,每个服务都有可能需要知道请求的用户是谁。一种朴素的解决方案是在微服务系统中应用与单体系统中相同的模式,但是问题就在于如何让所有的服务访问用户的数据。解决这个问题大致两个思路:若使用共享用户数据库时,更新数据库表会成为一个难题,因为所有服务必须同时升级以便能够对接修改后的表结构;若将相同的数据分发给所有服务时,当某个用户已经被认证,如何让每个服务知晓这个状态是一个问题。

Borsos 指出,单点登录(SSO)方案可能看起来是一个好主意,但这意味着每个面向用户的服务都必须与认证服务交互,这会产生大量非常琐碎的网络流量,同时这个方案实现起来也相当复杂 。 在其他方面,选择 SSO 方案安全性会很好,用户登录状态是不透明的,可防止攻击者从状态中推断任何有用的信息。

分布式会话方案,原理主要是将关于用户认证的信息存储在共享存储中,且通常由用户会话作为 key 来实现的简单分布式哈希映射。 当用户访问微服务时,用户数据可以从共享存储中获取。 该解决方案的另一个优点是用户登录状态是不透明的。 当使用分布式数据库时,它也是一个高度可用且可扩展的解决方案。 这种方案的缺点在于共享存储需要一定保护机制,因此需要通过安全链接来访问,这时解决方案的实现就通常具有相当高的复杂性了。

客户端令牌方案, 此令牌在客户端生成,由身份验证服务进行签名,并且必须包含足够的信息,以便可以在所有微服务中建立用户身份。 令牌会附加到每个请求上,为微服务提供用户身份验证。 这种解决方案的安全性相对较好,但身份验证注销是一个大问题, 缓解这种情况的方法可以使用短期令牌和频繁检查认证服务等。 对于客户端令牌的编码方案,Borsos 更喜欢使用 JSON Web Tokens(JWT),它足够简单且库支持程度也比较好。

客户端令牌与 API 网关结合,这个方案意味着所有请求都通过网关,从而有效地隐藏了微服务。 在请求时,网关将原始用户令牌转换为内部会话 ID 令牌。 在这种情况下,注销就不是问题,因为网关可以在注销时撤销用户的令牌。 这种方案虽然库支持程度比较好,但实现起来还是可能很复杂。

Borsos 建议使用客户端令牌(使用 JWT)和 API 网关结合的方案,因为这个方案通常使用起来比较容易,且性能也不错。 SSO 方案虽然能满足需求,但他认为还是应该避免使用。若分布式会话方案所需要的相关技术已经应用在你的场景上,那么这个方案也是比较有趣的。他同时强调在选择解决方案时应着重考虑注销的重要性。

明年的伦敦微服务大会定于 2017 年 11 月 6 日 -7 日举行。

查看英文原文 Authentication Strategies in Microservices Systems


感谢张卫滨对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016 年 12 月 12 日 18:003444

评论

发布
暂无评论
发现更多内容

开发更便捷 阿里云推出一站式应用研发平台EMAS 2.0

应用研发平台EMAS

阿里云 Serverless AI 低代码 移动研发平台

Redis 学习笔记 03:字典

架构精进之路

redis 七日更 28天写作

百度研究院的追星逐浪,中国科技的奋发自强

脑极体

高并发架构---TCP

赖猫

TCP 后端 高并发 TCP/IP 服务器开发

Linux网络之 从 C10K 到 DPDK

赖猫

c++ Linux linux编程 C10K DPDK

Java 程序经验小结:类层次优于标签类

后台技术汇

28天写作

自动驾驶汽车的发展史

anyRTC开发者

人工智能 自动驾驶 AI

比特币矿机工作原理

v16629866266

比特币 比特币区块链

53w字!阿里首推系统性能优化指南太香了,堪称性能优化最优解

程序员小毕

Java 架构 性能优化 JVM 代码优化

Intel首次公布11代酷睿桌面处理器性能:8核i9斩落锐龙12核

科技新消息

红牛交易所app系统开发

威掂l8929545452

区块链 系统开发 APP开发 红牛交易所

如何利用策略模式避免冗长的if-else/switch分支判断代码?

码农架构

Java 学习 设计模式

WiFi6 与 5G 的异同分析

石君

5G wifi 28天写作

Linux I/O 原理和 Zero-copy 技术全面揭秘

赖猫

c++ Linux linux编程 服务器开发 I/O

开发老人笔记:Git 常用命令清单

华为云开发者社区

git 代码 bug

Java Optimizing 读书笔记(一)

绝影-大数据

即构微信小程序直播组件是什么?有哪些功能?哪些小程序类目可以使用?

ZEGO即构

干货来袭!拼多多首推全新微服务进阶指南(全彩版)简直不要太香

程序员小毕

Java 架构 微服务 springboot SpringCloud

量化策略交易软件开发|量化策略交易系统APP开发

开發I852946OIIO

系统开发

组织部干部信息管理系统开发方案,智慧党建平台建设

WX13823153201

智慧党建平台建设

为什么说“5G是第四次工业革命”,到底有哪些推动和影响?

一只数据鲸鱼

5G 物联网 数据可视化 工业物联网

量化交易系统开发

威掂l8929545452

区块链 系统开发 量化交易系统 交易所

流行的后台管理系统模板总结

老魚

程序员 建站 web全栈

百度智能小程序打造购票观影一站式体验,影视宣发新玩法助力行业复苏

DT极客

避免短信接口被黑客刷取的方法

香芋味的猫丶

短信防刷 接口安全 短信验证码 短信防轰炸 短信防火墙

现货合约量化交易系统开发搭建

薇電13242772558

数字货币 策略模式

TypeScript 渐进迁移指南

LeanCloud

JavaScript typescript nodejs

解决Windows2012 R2下安装PostgreSQL报错的问题

PostgreSQLChina

数据库 postgresql 开源

OpenYurt v0.3.0 重磅发布:全面提升边缘场景下应用部署效率

阿里巴巴云原生

阿里巴巴 容器 云原生 k8s 开源项目

Serverless 架构到底要不要服务器?

Serverless Devs

Java 云计算 Serverless 运维 云原生

在函数计算中到底该不该使用 VPC?

donghui

Serverless

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

微服务系统中的认证策略-InfoQ