GOOGLE(SAML应用)登录联携AWS用户池(Amazon Cognito)
- 目录
- 一、参考资料
- 二、创建和配置AWS用户池
- 1. 创建用户池
- 2. 在用户池中创建联合身份提供商
- 3. 在用户池中创建应用程序集成
- 三、创建和配置GOOGLE SAML应用
- 1. 创建GOOGLE SAML应用
- 四、登录测试
目录
业务流程:实现用AWS提供的谷歌登录UI,以谷歌用户身份登录后,谷歌用户信息自动存储到AWS用户池中,并且能获取AWS认证用的code或access_token,登陆成功后重定向进入自定义系统页面。
一、参考资料
AWS: 通过 SAML 为 Amazon Web Services 配置 SSO
GOOGLE: 设置自定义 SAML 应用程序
GOOGLE: 为用户配置文件创建自定义属性
GOOGLE: SAML 应用程序错误消息
Configure Google as Authentication Provider using the SAML2 Protocol
chatgpt.
二、创建和配置AWS用户池
1. 创建用户池
Amazon Cognito ユーザープール
其余步骤省略,下一步下一步即可。
2. 在用户池中创建联合身份提供商
说明:
- 身份提供商类型要选择:SAML
- 上传元数据文档来源:admin用户的谷歌程序控制台
(这步在下面会介绍,先跳过,在GOOGLE SAML应用创建配置完后再上传即可)- 属性映射配置:用谷歌SAML程序属性映射到AWS用户池属性,这里谷歌SAML属性中的NameID指代是谷歌邮箱格式,所以用NameID属性映射email,其余属性映射关系可参照具体业务追加。
下记图文解释
元数据文档来源:
元数据文档中体现的映射关系:
<md:NameIDFormat> urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress </md:NameIDFormat>
这段标签 md:NameIDFormat 是 SAML (Security Assertion Markup Language) 中的一个元素,它用于定义 SAML 断言中的 NameID 的格式。以下是它的含义解释:
md:NameIDFormat:这是一个 SAML 元素,用于指定 SAML 断言中的 NameID 的格式。
urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress:这是一个 URI 标识符,表示 NameID 的格式是电子邮件地址(emailAddress)。
在 SAML 断言中,NameID 用于标识认证的主体(即用户)。该元素指定了在 SAML 断言中使用的 NameID 的格式,这里的 urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress 指示 NameID 将采用电子邮件地址的格式。
这个标签告诉 SAML 系统,在 SAML 断言中,NameID 将作为电子邮件地址提供给相关系统,以标识用户。例如,当一个用户通过 SAML 单点登录到一个服务时,服务将从 SAML 断言中提取 NameID,并将其视为用户的电子邮件地址。
3. 在用户池中创建应用程序集成
①创建域
这个Cognito 域URL在后面创建配置GOOGLE SAML应用 会用到。
②创建应用程序客户端
应用程序客户端中详细配置参照
三、创建和配置GOOGLE SAML应用
admin用户 GOOGLE控制台
1. 创建GOOGLE SAML应用
注意: 不是应用管理者,没有此(添加自定义SAML应用程序)选项
接下来,参照这篇创建SAML应用的手顺
Configure Google as Authentication Provider using the SAML2 Protocol
**注意:**下载完IDP数据源,上传到AWS SAML身份提供商的配置项(元数据文档)中。
以下呈现:DEMO配置完后的各配置项
https://admin.google.com/u/2/ac/apps/unified
说明:
- ACS URL: AWS Cognito 域 + /saml2/idpresponse
- Entity ID: urn:amazon:cognito:sp: + AWS 用户池ID
四、登录测试
谷歌用户登录成功后自动跳转到AWS应用程序客户端设置的允许的回调 URL画面,并返回认证code参数,
AWS用户池自动追加登录成功的谷歌用户
补充说明:认证code参数换成 获取认证access_token参数
得到URL:
将 code 换成 token
将 ** & amp; ** 换成 &
得到URL:
access_token 取得
JavaScript 代码参照:
// window.open("https://www.baidu.com", "_target");
window.location.href =
"https://你的自定义.auth.ap-northeast-1.amazoncognito.com/login?client_id=你的client_id&response_type=token&scope=aws.cognito.signin.user.admin+email+openid+phone&redirect_uri=你的重定向URL";
// 获取完整的URL
var url = window.location.href;
// alert(url);
// 解析URL,获取查询字符串参数
// 从 URL 中获取哈希部分(包含 #)
const hash = url.split("#")[1];
// 解析哈希部分中的参数
const params = new URLSearchParams(hash);
console.error(params);
// 从参数中获取 access_token
const access_token = params.get("access_token");
console.error("access_token", access_token);