AWS实战:利用Amazon Cognito实现SSO
创始人
2025-06-01 19:26:37
0

Amazon Cognito简介

  • Amazon Cognito 是一个提供提供身份验证、授权和用户管理的服务,可以用于Web 和移动应用程序的用户管理。

  • Amazon Cognito 的两个主要组件是用户池和身份池。

  • 用户池提供了注册和登录功能。利用用户池,用户可以通过 Amazon Cognito 登录您的 Web 或移动应用程序,也可以通过第三方身份提供商(IdP)进行登录。

  • 使用身份池,可以授予用户访问其他 AWS 服务的权限。

Amazon Cognito 应用场景

我们来看看以下常见 Amazon Cognito 场景图。在此场景中,目标是验证用户身份,然后授予用户对其他AWS服务的访问权限。

  1. 在第一步中,应用程序用户通过用户池登录,并在成功进行身份验证后收到用户池令牌。

  1. 接下来,应用程序通过身份池将用户池令牌换成AWS凭证。

  1. 最后,应用程序用户可以使用这些AWS凭证访问其他AWS服务(如 Amazon S3 或 DynamoDB)。

User Pool

  • 注册和登录服务。

  • 用于登录用户的内置的、可自定义的 Web UI。

  • 使用 Facebook、Google、Login with Amazon 和 Sign in with Apple 的社交登录,以及通过您的用户池中的 SAML 和 OIDC 身份提供商的登录。

  • 用户目录管理和用户配置文件。

  • 多重身份验证(MFA)、遭盗用凭证检查、账户盗用保护以及电话和电子邮件验证等安全功能。

  • 通过 AWS Lambda 触发器进行的自定义工作流程和用户迁移。

Indetity Pool

借助身份池,您的用户可以获取临时AWS凭证来访问AWS服务,如 Amazon S3 和 DynamoDB。身份池支持匿名访客用户以及可用来验证身份池用户的身份的以下身份提供商:

  • Amazon Cognito user pools

  • 使用 Facebook、Google、Login with Amazon 和 Sign in with Apple 的社交登录

  • OpenID Connect (OIDC) 提供商

  • SAML 身份提供商

  • 已经过开发人员验证的身份

Amazon Cognito实现同域多站点SSO

适用场景

适用于多个独立的网站拥有相同的父域名。比如:

https://blog.jessica.com.cn

https://mall.jessica.com.cn

登录工作流程

  • 用户首次访问网站时会重定向到Cognito登录页面

  • 输入用户名密码后,由Cognito验证完成后,重定向到service登录页面,并将code作为request parameter返回

  • service利用code获取accessToken,将accessToken设置到cookie中,cookie domain设置为父域名

  • 用户再次访问网站时会携带accessToken cookie,service对accessToken cookie进行解析验证,验证通过则放行

  • 用户访问其他子域名也会携带父域名的cookie,因此也会带上accessToken cookie, 无需再次登录

登出工作流程

  • 清除cookie

  • 登出Cognito

Amazon Cognito实现跨域多站点SSO

适用场景

适用于多个独立的网站拥有完全不同的域名。比如:

https://blog.jessica.com.cn

https://mall.wind.com.cn

登录工作流程

  • 跨域带来的问题就是cookie不同共享,如果套用同域的登录流程,service1登录之后,cookie只设置到了service1的domain,访问service2的页面时,由于无法带上service1 domain的cookie,所以service2还需登录

  • 解决方案就是利用一个额外的SSO Service作为跳转

  • 用户首次访问网站时会重定向到SSO Site的登录页面,由SSO Site登录页面重定向到Cognito登录页面

  • 输入用户名密码后,由Cognito验证完成后,重定向到SSO Site Authorize页面,SSO Site 利用code获取accessToken, 然后用自己的domain将accessToken设置到cookie中,最后重定向到Service Authorize页面, 重定向时将accessToken作为request parameter传递给Service

  • service接收到accessToken之后,用自己的domain将accessToken设置到cookie中,并重定向到home页面

  • 用户再次访问网站时会携带accessToken cookie,service对accessToken cookie进行解析验证,验证通过则放行

  • 用户访问其他域名的网站时,首先会重定向到SSO Site的登录页面,由于SSO Site已经包含了accessToken cookie, 因此无需重定向到Cognito登录页面,只需要重定向到Service Authorize页面, 重定向时将cookie 中的accessToken作为request parameter传递给Service 即可

登出工作流程

  • service1登出之后,只清除了service1和sso service的cookie,service2的cookie仍在,因此service2还能继续访问。Cogntio只支持refreshToken的revoke,所以如果service2的accessToken是仍然有效。

使用Cognito的缺点

Cognito登录成功后跳转用到的callback url只能设置为固定值,因此无法实现每次登录跳转到用户访问的页面,只能固定跳转到某个具体页面。

代码实现

https://github.com/JessicaWin/aws-in-action/tree/master/cognito-sso

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...