AWSCognitoSSO简介
AmazonCognito提供用户池直接登录,也可以通过第三方身份提供商(IdP)联合。用户池管理处理以下令牌的开销:
从通过Facebook、Google、亚马逊和Apple进行的社交登录返回的令牌以及从OpenIDConnect(OIDC)和SAMLIdP返回的令牌。
一、配置用户池流程:
1。创建用户池选择联合身份提供商然后配置登录体验,在联合登录选项选择要配置的第三方身份提供商,可以随时添加或删除联合身份提供商
2。配置安全要求(密码策略、MFA(基于TOTPSMS消息))、配置注册体验(属性设置)、配置消息发送(为MFA配置发送途径)
3。配置联合身份提供商(SAML联合身份为例)
提供商名称必须要提供;
元数据文件就是身份提供商的一个XML格式的SAML文件
注意:属性必须映射
4。配置应用程序(OAuth2。0服务终端节点)
配置托管UI(为Cognito托管的注册和登录页面输入你有的域),设置回调URL(以在身份验证后将用户重定向回该URL)
5。SAML身份验证流程:
二、AmazonCognito能提供sso能力的基础就是能提供基于云的应用程序提供OAuth身份验证;托管UI提供OAuth2。0合规授权服务器。它提供了终端用户流的默认实现,例如注册、身份验证等。
OAuth2。0授权类型:
Authorizationcodegrant(授权码授予):官方建议方式
(A)客户端将用户导向认证服务器。
responsetype:表示授权类型,此处的值固定code,必选项。
clientid:表示客户端的ID,必选项。
redirecturi:表示重定向的URI,可选项。
scope:表示权限范围,可选项。
state:表示客户端的当前状态,可以指定任意值,认证服务器会原封不动地返回这个值。
样例:
https:ny。auth。uswest2。amazoncognito。comlogin?clientid5s4l750hjpb5g7gne4m22mcbqiresponsetypecodescopeemailopenidphoneredirecturihttps3A2F2Fdev。d6tklzdanqknf。amplifyapp。com2Fpublic2Flogin3Fredirect3D2Fretrive2Ffda
(B)用户决定是否给于客户端授权。
(C)假设用户给予授权,认证服务器将用户导向客户端事先指定的重定向URI(redirectionURI),同时附上一个授权码。回应URI:
ocode:表示授权码,必选项。
该码的有效期应该很短,通常设为10分钟,客户端只能使用该码一次,否则会被授权服务器拒绝。
该码与客户端ID和重定向URI,是一一对应关系。
样例:
https:dev。d6tklknf。amplifyapp。compubliclogin?redirectretrivefdacodedc4f94ba70e845e3a65aa05c625b555e
(D)客户端收到授权码,附上早先的重定向URI,向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。granttype:表示使用的授权模式,必选项,此处的值固定为authorizationcode。code:表示上一步获得的授权码,必选项。redirecturi:表示重定向URI,必选项,且必须与A步骤中的该参数值保持一致。clientid:表示客户端ID,必选项。
POSTtokenHTTP1。1
Host:server。example。com
Authorization:BasicczZCaGRSa3F0MzpnWDFmQmF0M2JW
ContentType:applicationxwwwformurlencoded
granttypeauthorizationcodecodeSplxlOBeZQQYbYS6WxSbIA
redirecturihttps3A2F2Fclient2Eexample2Ecom2Fcb
样例:https:ny。auth。uswest2。amazoncognito。comoauth2token?clientid5s4l750hjpb5g7gne4m22mcbqigranttypeauthorizationcodecode2a5c01c722264e56a6aa8e6d07e2a5d0redirecturihttps3A2F2Fdev。d6tklzdanqknf。amplifyapp。com2Fpublic2Flogin3Fredirect3D2Fretrive2Ffda
注意:仅当granttype为authorizationcode时,令牌终端节点才返回refreshtoken
(E)认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(accesstoken)和更新令牌(refreshtoken)。accesstoken:表示访问令牌,必选项。tokentype:表示令牌类型,该值大小写不敏感,必选项,可以是bearer类型或mac类型。expiresin:表示过期时间,单位为秒。如果省略该参数,必须其他方式设置过期时间。refreshtoken:表示更新令牌,用来获取下一次的访问令牌,可选项。scope:表示权限范围,如果与客户端申请的范围一致,此项可省略。
HTTP1。1200OK
ContentType:applicationjson;charsetUTF8
CacheControl:nostore
Pragma:nocache
{
accesstoken:2YotnFZFEjr1zCsicMWpAA,
tokentype:example,
expiresin:3600,
refreshtoken:tGzv3JOkF0XG5Qx2TlKWIA,
exampleparameter:examplevalue
}
三、AWSCognito将充当服务提供商(SP);第三方服务登录充当身份提供商(IdP)。
在授予用户对AWS服务的访问权限之前,AWSCognito会向身份提供商验证用户的权限,同时身份提供商检查用户身份(例如电子邮件、密码)并向AWSCognito断言用户应该有权访问,
并且如果用户有访问权限,则表明用户身份是合法的;
单点登录身份验证基于以下步骤:
1。用户访问应用程序,该应用程序将他们发送到AWSCognito托管的网站
2。AWSCognito确定用户的来源(通过客户端ID、应用程序子域等)并将他们引导到身份提供商进行身份验证
3。用户被重定向到其浏览器上的SSOURL。用户已经与身份提供者有一个活动的浏览器会话,或者通过登录创建一个。身份提供者以XML文档格式创建身份验证响应,其中可能包含用户的用户名、电子邮件地址(和其他特征如果设置),然后进行签名。结果返回给服务提供商(AWSCognito)SAML的身份验证响应
4。认证响应由服务提供商使用证书指纹检索和验证,该服务提供商已经知道身份提供商并拥有证书指纹。使用URL中的访问令牌,确认用户身份,并授予用户应用访问权限
模拟IdP启动的SSO的身份验证流程。用户通过公司门户网站中的链接向AmazonCognito进行身份验证流程图:
最终就是应用程序用授权码code交换AmazonCognito令牌。
四、异常日志不是太友好无法查看日志只能通过浏览器接口返回错误信息判断异常:
errorunauthorizedclientclientid68c2js91dt4ji7n3tpveunqr57
五、集成Okta
元数据文档下,粘贴您复制的身份提供商元数据URL
https:dev20665669。okta。comappexk8t912c0JitzLX75d7ssosamlmetadata
终端节点URL
https:ny。auth。uswest2。amazoncognito。comoauth2authorize?responsetypetokenidentityproviderOktaclientid5s4l750hjpb5g7gne4m22mcbqiredirecturihttps3A2F2Fdev。d6tklzdanqknf。amplifyapp。com2Fpublic2Flogin3Fredirect3D2Fretrive2FfdascopeallowedOauthScopes
六、AWSSSO是AmazonWebServices(AWS)的单点登录(SSO)服务
七、适配改造
1。增加一种新的token验证方式,调用AWS的API验证token合法性
2。用户要不要落盘?如果不落盘用户轨迹如何调整?