跳到主要内容

认证流程

AWSops 通过 Amazon Cognito + Lambda@Edge + CloudFront 组合处理认证。

Cognito 配置

项目设置
User Poolawsops-user-pool(禁用自助注册)
登录方式电子邮件或用户名
密码策略8 个字符以上,必须包含大小写字母和数字
OAuthAuthorization Code Grant,OpenID/Email/Profile
令牌有效期1 小时
登录 UI自定义登录页面(/awsops/login)— 不使用 Cognito Hosted UI
认证流程USER_PASSWORD_AUTH(InitiateAuth)via /api/auth

认证流程详解

  1. 浏览器访问 /awsops
  2. CloudFront 通过 viewer-request 事件调用 Lambda@Edge
  3. Lambda@Edge 检查 awsops_token Cookie → 不存在/已过期
  4. 302 重定向到自定义登录页面 /awsops/login(不是 Cognito Hosted UI)
  5. 用户输入电子邮件/密码 → POST /awsops/api/authaction: login
  6. 服务器调用 Cognito InitiateAuth(USER_PASSWORD_AUTH → 获取 IdToken
  7. 设置 awsops_token HttpOnly·Secure·SameSite=Lax Cookie(1 小时)
  8. 之后经过认证的请求经由 CloudFront → ALB → EC2 转发
  1. 浏览器携带 awsops_token Cookie 访问
  2. Lambda@Edge 验证 JWT → 有效
  3. 请求直接经由 CloudFront → ALB → EC2 转发

Lambda@Edge

项目设置
区域us-east-1(Lambda@Edge 必需)
运行时Python 3.12(部署处理程序;CDK 存根为 Node.js 20)
触发器CloudFront viewer-request
功能验证 awsops_token JWT Cookie,未认证时重定向到 /awsops/login
登出

HttpOnly Cookie 无法通过 JavaScript(document.cookie)删除。AWSops 通过 POST /api/auth 在服务器端删除 Cookie。

相关页面