gpt4 book ai didi

reactjs - 使用 AWS Cognito 和 React 仅通过 Facebook/Google 登录(无用户名/密码)

转载 作者:行者123 更新时间:2023-12-03 13:34:39 47 4
gpt4 key购买 nike

我想构建一个react.js Web应用程序(最终也是一个React Native iOS应用程序),它依赖Facebook(以及后来的Google)进行身份验证,无需用户名/密码选项。我计划在 AWS API Gateway 中托管我的服务器端 API(适用于应用程序的 Web 和移动版本)。

现在我试图了解 AWS Cognito 应如何融入此应用程序。

首先,我假设我不需要 Cognito 用户池,因为我只需要联合社交登录,而不需要用户名/密码登录。这个假设正确吗?

其次,我假设我确实需要一个Cognito身份池来轻松验证我的应用程序对AWS API网关的调用。这个假设正确吗?如果我的应用程序对 AWS 服务的所有访问都将通过调用 AWS API Gateway 端点来实现,这仍然正确吗?

第三,是否有像这样的仅限社交登录用例的公共(public)代码示例?我在 AWS 文档中找到的所有示例似乎都假设正在使用 Cognito 用户池。我能找到的最接近的是 archived GitHub issue这看起来很接近我的用例,但没有响应。 ;-(

最佳答案

首先,我假设我不需要 Cognito 用户池,因为我只需要联合社交登录,而不是用户名/密码登录。这个假设正确吗?

Federated identities用于“为用户提供临时 AWS 凭证...” - 因此,如果您只想通过联合登录提供临时访问权限,则此假设正确。 p>

如果您想要管理用户组和配置文件以及其他用户服务,您将需要用户池。但是,根据您的问题,这不是必需的。

其次,我假设我确实需要一个 Cognito 身份池来轻松验证我的应用程序对 AWS API 网关的调用。这个假设正确吗?如果我的应用程序对 AWS 服务的所有访问都将通过调用 AWS API Gateway 端点来实现,这仍然正确吗?

您的假设是正确,但是,我想添加有关使用 API Gateway 进行身份验证的信息,以便您了解还存在哪些其他方法。

Cognito 身份池是针对 API Gateway 进行身份验证的一种方法。 API网关的认证方式有3种

  1. Cognito Identity Pool Authenticated Role
  2. API Gateway Identity Pool Authorizer
  3. API Gateway Lambda Authorizer

方法 1方法 2 和 3 之间的主要区别在于身份验证模式。 Cognito 身份池经过身份验证的角色交换 JWT对于 AWS IAM credentials在 API 调用中使用。在其他两种方法中,JWT 用作身份验证器。在此answer我更详细地解释了其中的差异。

由于 Cognito 身份池返回 AWS IAM 凭证,因此它的用途也更广泛。如果您的应用程序最终需要访问其他 AWS 服务(例如 S3),那么 Cognito 身份池将是首选方法。

第三,是否有像这样的仅限社交登录用例的公共(public)代码示例?

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

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

  1. 使用 Cognito 用户池进行身份验证
  2. 使用从身份验证收到的 AWS IAM 凭证向 API Gateway 发出 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 和不使用 AWS-Amplify)中,身份验证都是一个两步过程。首先,您的应用程序必须通过 Google 或 Facebook 进行身份验证才能接收 JWT。其次,将此 JWT 交换为将用于 API 调用的 IAM 凭证。

身份验证流程:

  1. 应用程序使用该身份提供商的 SDK 向身份提供商(例如 FaceBook )进行身份验证。作为响应,身份提供商会发送一个 JWT,该 JWT 将由应用程序缓存。
  2. 应用程序使用缓存的 JWT 向 AWS 进行身份验证。如果在 AWS 中配置了身份提供商,作为响应,AWS 会发送具有授予该身份提供商的权限的 IAM 凭证。
  3. IAM 凭证用于向 API Gateway 发出 Sig v4 请求

这个documentation更详细地了解有关 Facebook 的这些步骤。

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

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

关于reactjs - 使用 AWS Cognito 和 React 仅通过 Facebook/Google 登录(无用户名/密码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51691687/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com