使用AWS Cognito和React的仅限Facebook / Google的登录名(无用户名/密码)

贾斯汀·格兰特

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

现在,我试图了解AWS Cognito应该如何适合此应用程序。

首先,我假设我并不需要一个Cognito用户群,因为我只需要联合社会登录,没有用户名/密码登录。这个假设正确吗?

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

第三,像这样的仅社交登录用例的某个地方是否有公共代码示例?我可以在AWS文档中找到的所有示例似乎都假设正在使用Cognito用户池。我能找到的最接近的是一个已归档的GitHub问题,该问题似乎与我的用例相近,但没有任何响应。;-(

风筝编码器

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

联合身份用于“为用户提供临时AWS凭证...” -因此,如果您只想通过联合登录提供临时访问,则此假设是正确的

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

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

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

Cognito身份池是一种针对API网关进行身份验证的方法。使用API​​网关进行身份验证的三种方法

  1. Cognito身份库身份验证角色
  2. API网关身份池授权者
  3. API网关Lambda授权者

方法1方法2&3之间的主要区别是身份验证模式。Cognito身份池身份验证角色将JWT交换API调用中使用的AWS IAM凭证在其他两种方法中,JWT被用作验证者。在这个答案中,我将更详细地解释差异。

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

第三,像这样的仅社交登录用例的某个地方是否有公共代码示例?

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

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

  1. 使用Cognito用户池进行身份验证
  2. 使用从身份验证收到的AWS IAM凭证向API网关发出Sig v4请求

例如,将Google(或Facebook)配置为身份池中的身份提供者后,AWS Amplify可以轻松地让您执行登录(AWS Amplify联合身份

但是,这也可以在不使用AWS JavaScript SDK的AWS Amplify的情况下完成范例

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凭据。

认证流程:

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

文档针对有关Facebook的这些步骤进行了更详细的介绍。

以我自己的经验,我使用Okta作为使用OpenID的AWS Identity Pool的身份提供程序与您类似,我没有使用用户池,因为这些服务是由Okta管理的。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法使用有效的用户名和密码登录django管理页面

无法使用有效的用户名和密码登录django管理页面

如何使用WAMP登录phpMyAdmin,用户名和密码是什么?

如何使用OAuth2和Microsoft登录名和HTTP请求使用用户名/密码登录

使用cURL使用用户名和密码登录到Gitlab

将Facebook登录名与AWS Cognito用户池集成

我收到一个错误“ {错误:无效的登录名:535-5.7.8用户名和密码不被接受。” 当我尝试从Node JS使用模块nodemailer发送邮件时

同时使用用户名和Facebook进行AWS Cognito登录?

AWS Cognito登录用户而无需来自服务器的用户名和密码

如何使用2或3个用户名和密码以用户形式创建登录名?

如何通过Windows登录名使用用户名和密码访问Outlook Exchange Server?

错误:无效的登录名:535-5.7.8不接受用户名和密码

通过HTTPS调用使用用户名和密码的AWS Cognito用户池InitiateAuth的示例代码?

Flutter和Firebase-如何仅使用用户名和密码登录

我如何使用无用户名的登录名,而您只需要在Rails中使用PW

如何使用登录名(用户名和密码),按钮更改活动?

使用用户名和登录名的SFTP?

如何允许客户端使用用户名和密码登录Samba共享?

无法使用正确的用户名和密码登录Django管理员

使用Windows身份验证和用户名/密码安全登录Azure上的网站

Amazon Cognito使用用户名和密码登录用户

使用帐户,用户名,密码登录到AWS Console

用户名,显示名和登录名有什么区别?

使用脚本中的用户名和密码使用GNU屏幕登录

如何使用类名在Facebook中输入用户名和密码

登录名和用户名之间的区别

PHP登录“无效的用户名和密码”使用MySQL

curl 使用用户名密码和登录按钮登录网站

SqlConnection 使用 Dynamics GP 用户名和密码 -- 用户登录失败

TOP 榜单

热门标签

归档