将 AWS Cognito 与 google 和自定义登录与 React 集成的步骤

     2023-02-23     185

关键词:

【中文标题】将 AWS Cognito 与 google 和自定义登录与 React 集成的步骤【英文标题】:Steps to integrate AWS Cognito with both google and custom login with React 【发布时间】:2018-04-04 00:14:23 【问题描述】:

嗨,谁能告诉我为自定义(用户名/密码)和谷歌登录集成 AWS cognito 的步骤?我能够毫无问题地使用自定义登录。我能够毫无问题地配置用户池。我只是在徘徊客户端的变化。

我使用 amazon-cognito-identity-js 和 aws-sdk 软件包。

以下是我使用的一些代码 sn-p。在这里,我使用了一个参数来决定身份验证器。 如果你们中的任何人都可以提供任何反馈,那就太好了。谢谢你。

export function getAwsCredentials(userToken, type) 
  let authenticator = '';
  

  if (type == 'CUSTOM') 
    authenticator = `cognito-idp.$config.cognito
      .REGION.amazonaws.com/$config.cognito.USER_POOL_ID`;
  
  else if (type == 'GOOGLE') 
    authenticator = 'accounts.google.com';
  

  AWS.config.update( region: config.cognito.REGION );

  AWS.config.credentials = new AWS.CognitoIdentityCredentials(
    IdentityPoolId: config.cognito.IDENTITY_POOL_ID,
    Logins: 
      [authenticator]: userToken

    
  );

  return AWS.config.credentials.getPromise();

【问题讨论】:

这段代码对我来说很好。您想知道如何从 Google 获得 userToken 吗?还是您获得了 Cognito 不喜欢的 Google 令牌?除了用户池之外,假设您已经设置了联合身份池是否安全? 是的,我已经建立了一个联合身份池。那么当令牌来的时候,我可以把它添加为登录吗?知道如何确定用户如何登录(来自 google 或 custom )? 【参考方案1】:

当涉及到您的联合身份池时,您确实可以一视同仁地对待所有令牌。您只需更改登录映射中的[authenticator]

大概,调用您的getAwsCredentials 函数的代码会知道令牌来自哪里,并且它可以传递一个参数,就像您在上面所做的那样。

我想提一下,我认为这不一定是一种糟糕的方法。我可能会直接传入[authenticator] 值来代替type,但这是一件相对较小的事情。我的主要观点是,可能可以将知道令牌来自哪里的责任留给调用代码,而不是你被调用的函数。

使用令牌确定身份提供者

当然,有同样有效的方法可能希望或需要将身份提供者从令牌本身中提取出来。

当您integrate with Google directly 时,您会从 Google 获得一个令牌,然后将其传递给 Cognito(如您上面的代码中所示)。如果你解码令牌,你会发现

"iss": "accounts.google.com",

在某处。

同样,当您直接与用户池集成时,您从用户池(稍后提供给身份池)中获得的令牌包含以下内容:

"iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxxx",

通过这种方式,您可以通过检查用户的令牌来了解用户的登录方式。

关于 Cognito 托管 UI 的说明

如果您使用 Cognito 的托管 UI 登录 Google,您将从 Cognito 收到一个 access_token 和一个 id_token(通过重定向)。在这种情况下,所有令牌都来自相同地方(Cognito),这意味着您不能依赖任何调用代码来知道谁是真正的身份提供者.

在这种情况下,如果您的应用程序关心 IDP 是谁,您就必须破解令牌。 id_token 的这一部分可能是您所追求的:

  "identities": [
    
      "userId": "100000000000000000000",
      "providerName": "Google",
      "providerType": "Google",
      "issuer": null,
      "primary": "true",
      "dateCreated": "1507749926267"
    
  ],
  "token_use": "id",
  "auth_time": 1509303233,
  "name": "Your User",
  "exp": 1509306833,
  "iat": 1509303233,
  "email": "youruser@gmail.com"

【讨论】:

谢谢迈克!我会检查你的观点。我没有使用 Cognito 的托管 UI

将 Cognito 中的用户信息与 AWS Amplify GraphQL 关联

】将Cognito中的用户信息与AWSAmplifyGraphQL关联【英文标题】:AssociateuserinformationfromCognitowithAWSAmplifyGraphQL【发布时间】:2020-08-0206:11:02【问题描述】:我使用的是xcode11.4,Swift4。目标是:在Cognito用户池中注册一个新用户,然后使用... 查看详情

建议:将 Amazon Cognito 与 AWS DynamoDB 集成

】建议:将AmazonCognito与AWSDynamoDB集成【英文标题】:Suggestion:IntegratingAmazonCognitowithAWSDynamoDB【发布时间】:2021-04-2514:12:08【问题描述】:我已经构建了一个与AmazonCognito连接的应用程序来获取用户的登录和注册。目前,应用程序支... 查看详情

具有多个应用程序的 Cognito 一个用户池

】具有多个应用程序的Cognito一个用户池【英文标题】:CognitooneUserpoolwithmultipleapplications【发布时间】:2021-12-1313:23:11【问题描述】:我是aws新手,无法登录cognito。Cognito一个用户池与许多其他应用程序将使用与lambda中相同的登录... 查看详情

AWS Amplify AppSync 使用在 Cognito 中创建的 Google 用户登录

】AWSAmplifyAppSync使用在Cognito中创建的Google用户登录【英文标题】:AWSAmplifyAppSyncLoginusingGoogleuserthat\'screatedinCognito【发布时间】:2020-07-0811:21:24【问题描述】:您好,我使用React和GraphQL创建了一个AWSAmplify项目。看起来Appsync提供了... 查看详情

如何通过 aws-cognito 属性将用户分组?

】如何通过aws-cognito属性将用户分组?【英文标题】:Howtogroupuserstogetherbyaws-cognitoattributes?【发布时间】:2020-01-0521:47:24【问题描述】:我正在尝试将我的应用程序的用户分组到一个“公司”下。我在其他应用程序中通过为用户... 查看详情

AWS Cognito - 使用 JWT 与 cognito.getUser 开发工具包验证令牌

】AWSCognito-使用JWT与cognito.getUser开发工具包验证令牌【英文标题】:AWSCognito-verifytokenusingJWTvscognito.getUserSDK【发布时间】:2020-11-1722:00:50【问题描述】:我正在使用AWS的以下文档来验证传入令牌与Cognito以验证cognito池中的用户:htt... 查看详情

AWS iOS v2 Cognito 与 STS 身份验证

】AWSiOSv2Cognito与STS身份验证【英文标题】:AWSiOSv2CognitovsSTSauthentication【发布时间】:2014-09-3006:20:25【问题描述】:最近我决定了解哪种方法更适合移动客户端与S3的服务器端交互。我正在使用Cognito方法将图像和视频上传到服务... 查看详情

AWS Cognito 与 django 休息框架反应 js?

】AWSCognito与django休息框架反应js?【英文标题】:AWSCognitoinreactjswithdjangorestframework?【发布时间】:2021-04-2305:18:22【问题描述】:我想在我的web应用程序中将第三方身份验证与AWSCognito集成。我有一个带有django后端的ReactJS应用程序... 查看详情

AWS-Amplify 与 Cognito

】AWS-Amplify与Cognito【英文标题】:AWS-AmplifywithCognito【发布时间】:2019-03-0421:16:43【问题描述】:关注来自AWS的thistutorial。这看起来很棒,但我遇到了一些(新手?)问题:一个。在17:14我没有选择命名我的项目的选项到下一组显... 查看详情

如何将 Amazon Cognito 与适用于 Android 的 Google Plus 集成?

】如何将AmazonCognito与适用于Android的GooglePlus集成?【英文标题】:HowtointegrateAmazonCognitowithGooglePlusforAndroid?【发布时间】:2015-03-2007:58:19【问题描述】:这是我在这里的第一个问题,所以请温柔一点。作为我大学项目的一部分,... 查看详情

AWS cognito 快速将令牌交换为凭证

】AWScognito快速将令牌交换为凭证【英文标题】:AWScognitoexchangetokentocredentialinswift【发布时间】:2019-07-2021:22:59【问题描述】:我尝试在此awsDoc登录后使用身份池访问aws服务https://docs.aws.amazon.com/en_us/cognito/latest/developerguide/amazon-cog... 查看详情

如何从通过 Google/Federated Login 登录的 AWS Cognito 检索 id 令牌

】如何从通过Google/FederatedLogin登录的AWSCognito检索id令牌【英文标题】:HowtoretrieveidtokenfromAWSCognitowhologgedviaGoogle/FedaratedLogin【发布时间】:2018-10-0101:21:08【问题描述】:我已经设置了一个应用程序,用户可以在其中注册到我的站... 查看详情

OpenID 连接与 AWS Cognito 的集成

】OpenID连接与AWSCognito的集成【英文标题】:OpenIDconnectintegrationwithAWSCognito【发布时间】:2021-09-1002:15:43【问题描述】:我已经在AWS中设置了自托管的Discourse论坛,其中登录到论坛需要与AWSCognito(OpenID)集成,我遵循了AWS参考和以下... 查看详情

Firebase 身份验证与 AWS Cognito [关闭]

】Firebase身份验证与AWSCognito[关闭]【英文标题】:FirebaseauthenticationvsAWSCognito[closed]【发布时间】:2017-03-3116:23:13【问题描述】:我们正在使用APIGateway和Lambda在AWS上构建移动和Web应用程序,目前正在评估是否应该使用AWSCognito或Fireb... 查看详情

链接到 Cognito 用户池的 AWS Amplify GraphQL 架构

】链接到Cognito用户池的AWSAmplifyGraphQL架构【英文标题】:AWSAmplifyGraphQLSchemathatislinkedtoCognitoUserPool【发布时间】:2020-04-0506:59:49【问题描述】:我正在使用AWSAmplify创建一个网站平台,该平台主要用作注册用户的目录,具有与业务... 查看详情

AWS Cognito:处理相同用户(使用相同电子邮件地址)从不同身份提供商(Google、Facebook)登录的最佳实践

】AWSCognito:处理相同用户(使用相同电子邮件地址)从不同身份提供商(Google、Facebook)登录的最佳实践【英文标题】:AWSCognito:Bestpracticetohandlesameuser(withsameemailaddress)signinginfromdifferentidentityproviders(Google,Facebook)【发布时间】:202... 查看详情

AWS Cognito iOS 开发人员经过身份验证的身份

】AWSCognitoiOS开发人员经过身份验证的身份【英文标题】:AWSCognitoiOSDeveloperAuthenticatedIdentities【发布时间】:2014-12-0501:58:33【问题描述】:我正在尝试将amazoncognito与开发人员身份验证一起使用。我的API成功返回了一个id和token。但... 查看详情

vue js中的aws cognito UI表单字段问题

】vuejs中的awscognitoUI表单字段问题【英文标题】:IssuewithawscognitoUIformfieldsinvuejs【发布时间】:2022-01-1012:16:53【问题描述】:我在我的vuejs应用程序中使用AWScognito和amplify。使用预定义的字段一切正常。我在AWS用户池属性部分添加... 查看详情