Amazon Cognito 提供用户池直接登录,也可以通过第三方身份提供商(IdP)联合。用户池管理处理以下令牌的开销:
从通过 Facebook、Google、亚马逊和 Apple 进行的社交登录返回的令牌以及从 OpenID Connect(OIDC)和 SAML IdP 返回的令牌。
一、配置用户池流程:
1.创建用户池选择联合身份提供商然后配置登录体验,在联合登录选项选择要配置的第三方身份提供商,可以随时添加或删除联合身份提供商
2. 配置安全要求(密码策略、MFA(基于 TOTP SMS 消息))、配置注册体验(属性设置)、配置消息发送(为MFA配置发送途径)
3. 配置联合身份提供商(SAML联合身份为例)
提供商名称必须要提供;
元数据文件就是身份提供商的一个 XML 格式的 SAML 文件
注意:属性必须映射
4. 配置应用程序(OAuth 2.0 服务终端节点)
配置托管UI(为 Cognito 托管的注册和登录页面输入你有的域),设置回调URL(以在身份验证后将用户重定向回该 URL)
5.SAML身份验证流程:
二、Amazon Cognito 能提供sso能力的基础就是能提供基于云的应用程序提供 OAuth 身份验证; 托管 UI 提供 OAuth 2.0 合规授权服务器。它提供了终端用户流的默认实现,例如注册、身份验证等。
OAuth 2.0 授权类型:
Authorization code grant (授权码授予) :官方建议方式
(A)客户端将用户导向认证服务器。
response_type:表示授权类型,此处的值固定“code”,必选项。
client_id: 表示客户端的ID,必选项。
redirect_uri: 表示重定向的URI,可选项。
scope: 表示权限范围,可选项。
state: 表示客户端的当前状态,可以指定任意值,认证服务器会原封不动地返回这个值。
样例:
https://ny.auth.us-west-2.amazoncognito.com/login?client_id=5s4l750hjpb5g7gne4m22mcbqi&response_type=code&scope=email+openid+phone&redirect_uri=https%3A%2F%2Fdev.d6tklzdanqknf.amplifyapp.com%2Fpublic%2Flogin%3Fredirect%3D%2Fretrive%2Ffda
(B)用户决定是否给于客户端授权。
(C)假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向URI"(redirection URI),同时附上一个授权码。回应URI:
o code: 表示授权码,必选项。
该码的有效期应该很短,通常设为10分钟,客户端只能使用该码一次,否则会被授权服务器拒绝。
该码与客户端ID和重定向URI,是一一对应关系。
样例:
https://dev.d6tklknf.amplifyapp.com/public/login?redirect=/retrive/fda&code=dc4f94ba-70e8-45e3-a65a-a05c625b555e
(D)客户端收到授权码,附上早先的"重定向URI",向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
样例:https://ny.auth.us-west-2.amazoncognito.com/oauth2/token?client_id=5s4l750hjpb5g7gne4m22mcbqi&grant_type=authorization_code&code=2a5c01c7-2226-4e56-a6aa-8e6d07e2a5d0&redirect_uri=https%3A%2F%2Fdev.d6tklzdanqknf.amplifyapp.com%2Fpublic%2Flogin%3Fredirect%3D%2Fretrive%2Ffda
注意:仅当 grant_type 为 authorization_code 时,令牌终端节点才返回 refresh_token
(E)认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"example",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
"example_parameter":"example_value"
}
三、AWS Cognito 将充当服务提供商 (SP);第三方服务登录充当身份提供商 (IdP)。
在授予用户对 AWS 服务的访问权限之前,AWS Cognito 会向身份提供商验证用户的权限,同时 身份提供商 检查用户身份(例如电子邮件、密码)并向 AWS Cognito 断言用户应该有权访问,
并且如果用户有访问权限,则表明用户身份是合法的;
单点登录身份验证基于以下步骤:
1. 用户访问应用程序,该应用程序将他们发送到 AWS Cognito 托管的网站
2. AWS Cognito 确定用户的来源(通过客户端 ID、应用程序子域等)并将他们引导到身份提供商进行身份验证
3. 用户被重定向到其浏览器上的 SSO URL。用户已经与身份提供者有一个活动的浏览器会话,或者通过登录创建一个。身份提供者 以 XML 文档格式创建身份验证响应,其中可能包含用户的用户名、电子邮件地址(和其他特征如果设置),然后进行签名。结果返回给服务提供商 (AWS Cognito) — SAML 的身份验证响应
4. 认证响应由服务提供商使用证书指纹检索和验证,该服务提供商已经知道身份提供商并拥有证书指纹。使用 URL 中的访问令牌,确认用户身份,并授予用户应用访问权限
模拟 IdP 启动的 SSO 的身份验证流程。用户通过公司门户网站中的链接向 Amazon Cognito 进行身份验证流程图:
最终就是 应用程序用授权码code交换 Amazon Cognito 令牌.
四、异常日志不是太友好无法查看日志只能通过浏览器接口返回错误信息判断异常:
error=unauthorized_client&client_id=68c2js91dt4ji7n3tpveunqr57
五、集成Okta
元数据文档下,粘贴您复制的身份提供商元数据 URL
https://dev-20665669.okta.com/app/exk8t912c0JitzLX75d7/sso/saml/metadata
终端节点 URL
https://ny.auth.us-west-2.amazoncognito.com/oauth2/authorize?response_type=token&identity_provider=Okta&client_id=5s4l750hjpb5g7gne4m22mcbqi&redirect_uri=https%3A%2F%2Fdev.d6tklzdanqknf.amplifyapp.com%2Fpublic%2Flogin%3Fredirect%3D%2Fretrive%2Ffda&scope=allowedOauthScopes
六、AWS SSO是Amazon Web Services(AWS)的单点登录(SSO)服务
七、适配改造
1. 增加一种新的token验证方式,调用AWS的API验证token合法性
2. 用户要不要落盘?如果不落盘用户轨迹如何调整?
页面更新:2024-02-29
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号