分布式系统下的认证与授权

本文探讨了软件系统中的认证、授权和凭证管理问题,从单体系统到分布式系统和云原生环境的演进。重点介绍了单点登录(SSO)、JWT以及在分布式系统中面临的挑战,如状态管理、安全性和CAP理论。文章提供了JWT的最佳实践,指出JWT更适合用作一次性令牌,并建议在微服务架构中使用服务网格进行认证授权。
摘要由CSDN通过智能技术生成

在软件系统设计中,如何让应用能够在各种环境中安全高效的访问是个复杂的问题,这个问题的背后是一系列软件设计时需要考虑的架构安全问题:架构安全性 | 凤凰架构

  • 认证:系统如何识别合法用户,也就是解决 你是谁 的问题;
  • 授权:系统在识别合法用户后,还需要解决 你能做什么 的问题;
  • 凭证:系统如何保证它与用户之间的承诺是双方真实意图的体现,是准确、完整且不可抵赖的;
  • 保密:如何安全的持久化用户的账户信息,确保不会被任何人窃取与滥用;
  • 传输:在复杂的用户环境中,如何安全的传递用户信息,保证不被第三方窃听、篡改和冒充。

在漫长的架构演进历史中,业界对这些问题已经有很成熟的解决方案。在架构安全这块,最好的是遵循技术标准与最佳实践,尽可能不重复造轮子或“创新”。下面这个思维导图就是针对这些问题的常见的技术标准及方案:

架构安全思维导图

在研究分布式系统的认证和授权问题前,让我们回到单体架构的时代,看看在单体架构上这些问题是如何被解决的。

单体系统

单体系统

认证

认证主要解决 你是谁 的问题,从方式上来看有以下三种:认证 | 凤凰架构

  • 基于通信信道:建立通信信道之前需要证明 你是谁。在网络传输(Network)场景中的典型是基于 SSL/TLS 传输安全层的认证。
  • 基于通信协议:在获取资源之前需要证明 你是谁。在互联网(Internet)场景中的典型是基于 HTTP 协议的认证。
  • 基于通信内容:在提供服务之前需要证明 你是谁。在万维网(World Wide Web)场景中的典型是基于 Web 内容的认证。

在单体系统时代,认证方式一般是在通信信道上开启 HTTPS,在通信协议上利用 HTTP Basic/Digest/Bearer/HOBA/OCRA 等方式并在通信内容上结合表单或 TOTP 等的认证组合方式。这样可以从通信的不同阶段获得相应的安全保证。

如果想对基于 HTTP 协议的认证方式做进一步的了解,可以参考这两篇文章:

  1. 认证 | 凤凰架构
  2. 细说API - 认证、授权和凭证 - Thoughtworks洞见
单点登录(SSO

认证的一个常见应用场景是单点登录。单点登录主要解决了一个一次登录访问多个独立应用的问题。在单点登录方案出现之前,每个应用都需要独立登录维持各自的会话。相关的技术方案已经很成熟,主要有以下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值