使用 Amazon Cognito 认证终端用户

在 AWS 上部署应用

Dunieski Otano

Amazon Web Services Solutions Architect

自己造登录?

  • 新应用需要完整注册与登录
  • 团队打算从零开发认证
  • Cognito 已安全实现这些功能

选择托管的 Amazon Cognito 认证,而非自建登录

在 AWS 上部署应用

User pool 与 identity pool

左侧为 Cognito User Pool 作为用户目录签发令牌,中间 Identity Pool 用已验证令牌换取临时 AWS 凭证,右侧为 AWS 服务

  • User pool:托管的终端用户目录
  • 处理注册、登录并签发令牌
  • Identity pool:用登录换取AWS 凭证
  • 结合使用:先认证,再授权访问 AWS
在 AWS 上部署应用

Cognito 的三种令牌

  • ID token:标识用户是谁(身份声明)
  • Access token:说明用户可调用的内容
  • Refresh token:无需重登获取新令牌
  • 三者都是可解码验证的JWT

三个并列的 Cognito JWT:ID token 含身份声明,access token 含 API 权限范围,refresh token 为长时效用于静默续期

在 AWS 上部署应用

联合身份

  • Federation:使用外部身份提供商登录
  • 社交:Google、Facebook、Apple
  • 企业:SAML 与 OIDC 提供商
  • Cognito 负责信任中介并签发自有令牌

Cognito 联邦:用户选择社交提供商(Google、Facebook)或企业 SAML/OIDC 提供商,Cognito 验证外部登录并签发标准令牌

在 AWS 上部署应用

将 Cognito 用作 API Gateway 授权器

API Gateway 使用 Cognito 授权器:客户端在 Authorization 头携带 access token,网关在运行 Lambda 前验证,失效令牌以 401 拒绝

  • API Gateway 可使用Cognito 授权器
  • 客户端在Authorization 头中发送其令牌
  • API Gateway 先验证令牌再运行后端
  • 失效或过期令牌会在边缘被拒
在 AWS 上部署应用

典型的登录到 API 调用流程

  • 用户登录user pool
  • 获得 ID、access、refresh 令牌
  • 客户端用access token 调用 API Gateway
  • Cognito 授权器验证后,后端再运行

登录到调用 API 的流程:用户登录 user pool 获得令牌,客户端将 access token 发送至 API Gateway,Cognito 授权器验证,后端 Lambda 执行

在 AWS 上部署应用

Cognito 常见误区

  • 在需 access token 的场景误发ID token
  • 混淆 user pool 与 identity pool
  • 仅用 user pool 试图授权AWS 访问
  • 在客户端不安全地存储令牌

常见 Cognito 错误:向 API 发送 ID token 而非 access token,混淆 user pool 与 identity pool,在客户端不安全地存储令牌

在 AWS 上部署应用

让我们一起练习吧!

在 AWS 上部署应用

Preparing Video For Download...