我有一个混合应用程序,该应用程序使用Cognito联合身份(Facebook)通过AWS Amplify Javascript库沿着Cognito用户池登录。 使用Cognito用户池的登录工作正常,AWS Amplify处理令牌刷新,因此即使重新启动应用程序,用户也不会注销应用程序。 使用联合身份是不同的:在Facebook登录后,我获得了短暂的访问令牌(1小时),可以使用AWS.federatedSign()与AWS令牌交换。
AWS Amplify官方文档说ASW Amplify应该自动刷新google / facebook的令牌。就我而言,我收到错误消息:
refreshing federation token failed: no fb sdk available
答案 0 :(得分:0)
AWS文档不是很好,我的理解(与之抗争了几天)如下。希望对您有帮助...
在两种情况下,Amplify / Cognito支持联合身份验证。
1)使用联合身份验证提供程序登录Cognito 用户池的位置。 (尽我所知)这仅在使用Cognito托管站点登录时才可行。您的代码可能类似于...
Auth.federatedSignIn({provider: 'Facebook'})
或
Auth.federatedSignIn()
2)您的应用程序直接通过Facebook进行身份验证(例如,使用设备本机应用程序),然后使用Facebook authToken通过Cognito Identity-Pool 进行身份验证。您的代码可能看起来像...
fb.login(['public_profile', 'email'])
.then(response => {
// Some object marshalling omitted...
Auth.federatedSignIn('facebook', { token: accessToken, expires_at }, user)
})
AWS文档似乎常常无法区分这两个非常不同的用例,但在一般情况下1记录得更好/更频繁。
在第一种情况下,Cognito会按照您的预期进行操作,即管理Cognito和Facebook令牌的生命周期到期。不利的一面是您需要退出应用程序以进行身份验证,这会对用户体验产生某些影响,特别是对于设备本机或混合应用程序。
在第二种情况下-我相信Cognito所做的只是为您提供(具有指定角色的)IAM凭据,以换取您的提供商凭据。您必须自己在应用程序中为提供者令牌实现令牌生命周期。
它不能直接回答您的问题,但是我发现这是一个非常有用的指南 https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc_cognito.html
我还创建了一个博客,详细介绍如何在Ionic上进行此工作 https://martincroker.wordpress.com/2019/07/09/using-ionic-with-aws-amplify-facebook-authentication/