本周系统设计复习:
- 系统设计:为什么 Docker 重要?
- 生成对抗网络(GAN)- 手绘 AI
- JWT 101:无状态认证的关键
- 最流行云服务的便捷速查表
- 数字签名如何工作?
- 从 0 到 15 亿客人:Airbnb 的架构演进
JWT 组成
JWT 或 JSON Web Tokens 是一个开放标准,用于在双方之间安全传输信息。它们广泛用于认证和授权。
JWT 由三个主要组件组成:
1. 头部(Header)
每个 JWT 携带一个头部,指定签名 JWT 的算法。它用 JSON 格式编写。
2. 负载(Payload)
负载由声明和用户数据组成。有不同类型的声明,如注册、公共和私有声明。
3. 签名(Signature)
签名是使 JWT 安全的东西。它通过获取编码的头部、编码的负载、秘密密钥和算法并签名它来创建。
JWT 签名方法
JWT 可以用两种不同方式签名:
1. 对称签名(Symmetric Signatures)
它使用单个秘密密钥进行签名令牌和验证它。相同的密钥必须在签名 JWT 的服务器和验证它的系统之间共享。
2. 非对称签名(Asymmetric Signatures)
在这种情况下,私钥用于签名令牌,公钥用于验证它。私钥安全地保存在服务器上,而公钥可以分发给任何需要验证令牌的人。
云服务速查表
速查表包括:
- AWS、Azure、Google Cloud、Oracle Cloud、Alibaba Cloud
- 云服务器
- 数据库
- 消息队列和流平台
- 负载均衡、DNS 路由软件
- 安全
- 监控
数字签名如何工作
数字签名是一种特定类型的电子签名,用于签名和安全电子传输文档。
数字签名类似于物理签名,因为它们对每个人都是唯一的。它们识别签名者的身份。
以下是数字签名工作流程的示例,Alice 作为发送者,John 作为接收者:
生成密钥对 Alice 生成由私钥和相应公钥组成的加密密钥对。私钥保持机密,仅签名者知道,而公钥可以公开共享。
创建哈希 签名者(Alice)使用哈希函数从文档创建唯一的固定长度数字和字母字符串,称为哈希。此哈希值表示文档的内容。
签名哈希 Alice 使用他们的私钥加密消息的哈希值。此哈希值称为数字签名。
附加签名 数字签名附加到原始文档,创建数字签名文档。它通过网络传输给接收者。
提取签名 接收者(John)从文档中提取数字签名和原始哈希值。
解密签名 接收者使用 Alice 的公钥解密数字签名。这产生最初用私钥加密的哈希值。
计算新哈希 接收者使用与签名者相同的哈希算法为接收到的消息计算新哈希值。然后他们将此重新计算的哈希与从数字签名获得的解密哈希值比较。
验证 如果哈希值相等,数字签名有效,并确定文档未被篡改或更改。
Airbnb 架构演进
Airbnb 在 200+ 国家运营,已帮助 400 万房东欢迎超过 15 亿客人到世界各地。
什么在技术上支持 Airbnb?
单体应用阶段
Airbnb 开始作为单体应用。它使用 Ruby-on-Rails 构建,内部称为 Monorail。
单体是单层单元,负责客户端和服务器端功能。
面向服务架构阶段
然而,随着 Airbnb 进入超增长,Monorail 开始面临问题。这时他们开始了从单体到面向服务架构的迁移旅程。
对 Airbnb 来说,SOA 是一个松散耦合服务网络,客户端向网关发出请求,网关将这些请求路由到多个服务和数据库。
服务类型
构建了各种类型的服务:
数据服务(Data Service) 这是底层,充当所有数据实体读写操作的入口点。
派生数据服务(Derived Data Service) 这些服务从数据服务读取并应用基本业务逻辑。
中间层服务(Middle Tier Service) 它们管理不适合数据服务级别或派生数据服务级别的重要业务逻辑。
展示服务(Presentation Service) 它们从所有其他服务聚合数据,也应用一些前端特定业务逻辑。
本文为学习目的的个人翻译,译文仅供参考。
原文链接:EP149: JWT 101: Key to Stateless Authentication。
版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。