本周系统设计复习:

  • 系统设计:为什么 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 作为接收者:

  1. 生成密钥对 Alice 生成由私钥和相应公钥组成的加密密钥对。私钥保持机密,仅签名者知道,而公钥可以公开共享。

  2. 创建哈希 签名者(Alice)使用哈希函数从文档创建唯一的固定长度数字和字母字符串,称为哈希。此哈希值表示文档的内容。

  3. 签名哈希 Alice 使用他们的私钥加密消息的哈希值。此哈希值称为数字签名。

  4. 附加签名 数字签名附加到原始文档,创建数字签名文档。它通过网络传输给接收者。

  5. 提取签名 接收者(John)从文档中提取数字签名和原始哈希值。

  6. 解密签名 接收者使用 Alice 的公钥解密数字签名。这产生最初用私钥加密的哈希值。

  7. 计算新哈希 接收者使用与签名者相同的哈希算法为接收到的消息计算新哈希值。然后他们将此重新计算的哈希与从数字签名获得的解密哈希值比较。

  8. 验证 如果哈希值相等,数字签名有效,并确定文档未被篡改或更改。

Airbnb 架构演进

Airbnb 在 200+ 国家运营,已帮助 400 万房东欢迎超过 15 亿客人到世界各地。

什么在技术上支持 Airbnb?

单体应用阶段

Airbnb 开始作为单体应用。它使用 Ruby-on-Rails 构建,内部称为 Monorail。

单体是单层单元,负责客户端和服务器端功能。

面向服务架构阶段

然而,随着 Airbnb 进入超增长,Monorail 开始面临问题。这时他们开始了从单体到面向服务架构的迁移旅程。

对 Airbnb 来说,SOA 是一个松散耦合服务网络,客户端向网关发出请求,网关将这些请求路由到多个服务和数据库。

服务类型

构建了各种类型的服务:

  1. 数据服务(Data Service) 这是底层,充当所有数据实体读写操作的入口点。

  2. 派生数据服务(Derived Data Service) 这些服务从数据服务读取并应用基本业务逻辑。

  3. 中间层服务(Middle Tier Service) 它们管理不适合数据服务级别或派生数据服务级别的重要业务逻辑。

  4. 展示服务(Presentation Service) 它们从所有其他服务聚合数据,也应用一些前端特定业务逻辑。

本文为学习目的的个人翻译,译文仅供参考。

原文链接:EP149: JWT 101: Key to Stateless Authentication

版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。