将AWS Cognito与Google集成以及使用React自定义登录的步骤

罗山·费尔南多(Roshan Fernando)

嗨,有人可以让我知道为自定义(用户名/密码)和Google登录集成AWS Cognito的步骤吗?我能够使自定义登录正常工作。我能够毫无问题地配置用户池。我只是在徘徊客户端更改。

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

以下是我使用的一些代码段。在这里,我使用了一个参数来确定身份验证器。如果您能提供任何反馈,那就太好了。谢谢。

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();
}

迈克·帕特里克

当涉及到联邦身份池时,您实际上可以将所有令牌都一样对待。您只需要[authenticator]在登录映射中进行更改即可

大概,调用getAwsCredentials函数的代码将知道令牌的来源,并且可以传递参数,就像您在上面所做的那样。

我想提一提,我认为这不一定是可怕的方法。我可能会[authenticator]直接传递值,而不是type,但这是相对较小的事情。我的主要观点是,它可能会被罚款要离开知道责任感,令牌从与调用代码来了,而不是你调用的函数。

使用令牌确定身份提供者

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

当你与谷歌直接集成,你从谷歌,一个令牌,该令牌时,传递到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_tokenid_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": "[email protected]"

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

AWS Cognito自定义登录UI

如何将AWS Cognito与自定义NodeJS服务器一起使用?

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

当我尝试使用AWS Cognito登录时,收到有关自定义Lambda触发器的AccessDeniedException

AWS Cognito不使用我的自定义消息lambda

AWS Cognito和自定义角色

AWS Cognito添加自定义属性

使用 React Native + AWS Cognito 登录 FB

是否可以使用AWS Cognito自定义属性?在Angular中使用JavaScript

如何使用AWS Cognito在.net上使用忘记密码自定义模板?

使用USER_PASSWORD_AUTH的AWS Cognito自定义身份验证流程

自定义电子邮件验证页面AWS Cognito

AWS Cognito用户池,自定义消息Lambda

带有Lambda的AWS Cognito用于自定义验证

在AWS Cognito上创建唯一的自定义属性

AWS Cognito AdminInitiateAuth缺少所有自定义范围

在AWS Cognito中设置自定义属性

将本机代码与CameraX集成到自定义React Native组件失败

无法将AWS Cloudfront与IAM中的自定义SSL证书一起使用

将AWS Cognito与API集成以进行身份验证

将 Twillio 与 AWS Cognito 集成以发送 MFA 验证码

AWS Event Bus无法将日志从AWS Lambda写入自定义日志组中的CloudWatch

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

如何将AWS Cognito用作单点登录?

使用Amplify将现有的AWS Cognito用户池集成到iOS项目中

将AWS IAM用户添加到AWS Cognito Pool

将 Rasa Webchat 与自定义 Python 函数集成

将 S3 与自定义用户管理集成

将显示默认ErrorTemplate以及自定义ErrorTemplate