使用Facebook的AWS Cognito登录

问题描述

我有一个Angular 10网站。我有一个AWS Lambda(ASP.NET Core 3.1),它可以通过AWS Cognito对具有电子邮件/密码的用户进行身份验证。但我想允许用户也使用Facebook(以及最终Google)登录。在Facebook / Google场景中,我的想法不是暂时不允许直接访问AWS服务(例如S3等),而是通过承载令牌与我的其他lambda进行交互。我有一个Cognito用户池,为此我创建了一个Facebook身份提供程序和映射。我读到某个地方需要身份池。因此,我创建了该文件,并将其作为提供者以及Facebook放入了Cognito用户池。

使用JavaScript代码

loginWithFacebook = () => {
    const login$ = from(this.facebookService.login());
    login$.subscribe(
      (response: LoginResponse) => {
        console.log(response);
        this.facebookLoginToAWS(response);
      },error => {
        console.error(error);
      }
    );
  };

我可以得到Facebook身份验证响应,没问题。然后使用您在每个博客,Stack Overflow帖子甚至在AWS文档中看到的以下代码(当然,用我自己的IdenityPoolId代替):

private facebookLoginToAWS = (facebookResponse: LoginResponse) => {
    console.log('facebookLoginToAWS',facebookResponse);

      if (facebookResponse.status === 'connected' && facebookResponse.authResponse) { 

        AWS.config.credentials = new AWS.CognitoIdentityCredentials({
          IdentityPoolId: 'us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',Logins: { 'graph.facebook.com': facebookResponse.authResponse.accesstoken }
        },{ 
          region: 'eu-west-1'
        });

        AWS.config.credentials.get((err) => {
          if (err) {
            return console.log("Error",err);
          }

          console.log("Cognito credentials",AWS.config.credentials);
          console.log("Cognito Identity Id",AWS.config.credentials.identityId);
        });

      } else if (facebookResponse.status === 'not_authorized') {
        document.getElementById('facebookStatus').innerHTML = 'Please log into this app.';
      } else {
        document.getElementById('facebookStatus').innerHTML = 'Please log into Facebook.';
      }
  };

我可以找回会话令牌(除了大量其他东西,例如accesKeyId,identityId和secretAccessKey)。

但是该会话令牌应如何处理?也许我很困惑,但是我想,因为Facebook字段和Cognito字段之间存在映射,以某种方式将Facebook用户迁移到Cognito用户池中,并且我可以为其他lambda的用户获得该JWT令牌。但是在检查了AWS仪表板之后,我可以在身份池中看到一个登录(我认为),但是没有相应的用户池条目。

enter image description here

我是否必须以某种方式手动迁移它(使用AWS JavaScript SDK)?我不想使用Amplify库。我在想错吗?是否以某种方式将会话令牌用作其他lambda的承载令牌?我是否需要以某种方式将该人添加用户用户

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)