reactjs – 仅使用AWS Cognito和React登录Facebook / Google(无
我想构建一个react.js网络应用程序(最终也是一个React Native iOS应用程序),它依赖于Facebook(以及后来的Google)进行身份验证而无需用户名/密码选项.我打算在AWS API Gateway中托管我的服务器端API(适用于应用程序的Web和移动版本).
现在我想了解AWS Cognito应该如何适应这个应用程序. 首先,我假设我不需要Cognito用户池,因为我只需要联合社交登录,而不需要用户名/密码登录.这个假设是否正确? 其次,我假设我确实需要一个Cognito Identity Pool来轻松验证我的应用程序对AWS API Gateway的调用.这个假设是否正确?如果我的应用程序对AWS服务的所有访问都是通过调用AWS API Gateway端点,那么它仍然是正确的吗? 第三,是否存在这样一个仅限社交登录用例的公共代码示例?我在AWS文档中找到的所有示例似乎都假设使用了Cognito用户池.我能找到的最接近的是一个看似接近我的用例的archived GitHub issue,但它没有回复. ;-( 解决方法
首先,而不需要用户名/密码登录.这个假设是否正确?
Federated identities用于“为用户提供临时AWS凭证……” – 因此,如果您只想通过联合登录提供临时访问,则此假设是正确的. 如果要管理用户组和配置文件以及其他用户服务,则需要用户池.但是,根据您的问题,这不是必需的. 其次,那么它仍然是正确的吗? 您的假设是正确的,但是,我想添加有关使用API?? Gateway进行身份验证的信息,以便您了解其他方法的存在. Cognito Identity Pool是针对API Gateway进行身份验证的一种方法.有三种方法可以使用API?? Gateway进行身份验证 > Cognito Identity Pool Authenticated Role 方法1和方法2和3之间的主要区别是身份验证模式. Cognito身份池经过身份验证的角色交换用于API调用的AWS IAM credentials的JWT.在另外两种方法中,JWT用作验证器.在这篇answer中,我更详细地解释了这一区别. 由于Cognito Identity Pool会返回AWS IAM凭据,因此它的用途也更广泛.如果您的应用最终需要访问其他AWS服务(例如S3),那么Cognito Identity Pools将是首选方法. 第三,是否存在这样一个仅限社交登录用例的公共代码示例? 是!我将尝试提供有关如何执行此操作的一些信息. 首先,我强烈建议使用AWS-Amplify库进行登录.该库提供了以下方法: >使用Cognito用户池进行身份验证 例如,一旦您在身份池中将Google(或Facebook)配置为身份提供商,AWS Amplify就可以轻松地允许您执行登录(AWS Amplify Federated Identities) 但是,这也可以在没有AWS Amplify的情况下使用AWS JavaScript SDK. Example完成: AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030',Logins: { // optional tokens,used for authenticated login 'graph.facebook.com': 'FBTOKEN','www.amazon.com': 'AMAZONTOKEN','accounts.google.com': 'GOOGLETOKEN' } }); 识别在两种解决方案中(使用AWS-Amplify和不使用),身份验证是一个两步过程.首先,您的应用必须通过Google或Facebook进行身份验证才能获得JWT.其次,此JWT将交换用于API调用的IAM凭据. 认证流程: >应用程序使用身份提供程序的SDK(例如FaceBook)对身份提供程序进行身份验证.作为响应,身份提供者发送将由应用程序缓存的JWT. 关于Facebook,这个documentation详细介绍了这些步骤. 根据我自己的经验,我使用Okta作为我的AWS身份池的身份提供者使用OpenID.与您类似,我没有使用用户池,因为这些服务由Okta管理. This是理解“无服务器”身份验证的另一个重要资源. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |