加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactjs – 仅使用AWS Cognito和React登录Facebook / Google(无

发布时间:2020-12-15 20:13:22 所属栏目:百科 来源:网络整理
导读:我想构建一个react.js网络应用程序(最终也是一个React Native iOS应用程序),它依赖于Facebook(以及后来的Google)进行身份验证而无需用户名/密码选项.我打算在AWS API Gateway中托管我的服务器端API(适用于应用程序的Web和移动版本). 现在我想了解AWS Cognito
我想构建一个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
> API Gateway Identity Pool Authorizer
> API Gateway Lambda Authorizer

方法1和方法2和3之间的主要区别是身份验证模式. Cognito身份池经过身份验证的角色交换用于API调用的AWS IAM credentials的JWT.在另外两种方法中,JWT用作验证器.在这篇answer中,我更详细地解释了这一区别.

由于Cognito Identity Pool会返回AWS IAM凭据,因此它的用途也更广泛.如果您的应用最终需要访问其他AWS服务(例如S3),那么Cognito Identity Pools将是首选方法.

第三,是否存在这样一个仅限社交登录用例的公共代码示例?

是!我将尝试提供有关如何执行此操作的一些信息.

首先,我强烈建议使用AWS-Amplify库进行登录.该库提供了以下方法:

>使用Cognito用户池进行身份验证
>使用从身份验证收到的AWS IAM凭据向GUI网关发出Sig v4请求

例如,一旦您在身份池中将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.
> App使用缓存的JWT通过AWS进行身份验证.如果在AWS中配置了身份提供程序,作为响应,AWS会发送具有授予该身份提供程序的权限的IAM凭据.
> IAM凭证用于向API网关发出Sig v4请求

关于Facebook,这个documentation详细介绍了这些步骤.

根据我自己的经验,我使用Okta作为我的AWS身份池的身份提供者使用OpenID.与您类似,我没有使用用户池,因为这些服务由Okta管理.

This是理解“无服务器”身份验证的另一个重要资源.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读