首页 > 解决方案 > 将外部身份提供程序与服务器端身份验证一起使用

问题描述

我正在使用 AWS SDK for Go 来使用 Cognito 进行服务器端身份验证。我已完成注册和登录,并使用用户名和密码工作。我根据文档以及重定向 URL 和文档要求的所有其他内容配置了所有三个外部身份提供程序。

我知道如何获取 Cognito 将为您构建的已构建注册/登录页面的 URL,并且这些页面具有 Google/Facebook/Amazon 登录按钮,但我需要能够将这些按钮放在前端我的网站。我不知道该怎么做。

编辑:请参阅@Stu 帖子的评论,详细了解为什么 JS SDK 答案被标记为正确答案。这可能会改变,但不会暂时改变。(tldr;aws go sdk 和 cognito 根本不支持这个)

标签: amazon-web-servicesgoserver-sideamazon-cognito

解决方案


您的应用需求已经超过了使用 cookie 切割器 Cognito 登录流程的地步。

我建议您只处理所有身份验证以自己识别,如下所示: https ://docs.aws.amazon.com/cognito/latest/developerguide/using-amazon-cognito-user-identity-pools-javascript-examples.html

这样,您可以像这样在您的网站上放置一个 facebook 登录按钮: https ://docs.aws.amazon.com/cognito/latest/developerguide/facebook.html

FB.login(function (response) {

  // Check if the user logged in successfully.
  if (response.authResponse) {

    console.log('You are now logged in.');

    // Add the Facebook access token to the Cognito credentials login map.
    AWS.config.credentials = new AWS.CognitoIdentityCredentials({
      IdentityPoolId: 'IDENTITY_POOL_ID',
      Logins: {
        'graph.facebook.com': response.authResponse.accessToken
      }
    });

    // Obtain AWS credentials
    AWS.config.credentials.get(function(){
        // Access AWS resources here.
    });

  } else {
    console.log('There was a problem logging you in.');
  }

});

然后像这样获取用户:

    var data = { UserPoolId : 'us-east-1_Iqc12345',
        ClientId : '12345du353sm7khjj1q'
    };
    var userPool = new AmazonCognitoIdentity.CognitoUserPool(data);
    var cognitoUser = userPool.getCurrentUser();

    if (cognitoUser != null) {
        cognitoUser.getSession(function(err, session) {
            if (err) {
                alert(err);
                return;
            }
            console.log('session validity: ' + session.isValid());
        });
    }

其他 Facebook SDK 信息: https ://developers.facebook.com/docs/facebook-login/web

因为您将经历在应用程序中设置 Cognito 流的动作。我强烈建议您继续使用 lambda 触发器设置自定义消息。 https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-custom-message.html

更新:再来一次。

https://docs.aws.amazon.com/sdk-for-go/api/service/cognitoidentityprovider/#CognitoIdentityProvider.AdminInitiateAuth

在这里您可以看到一个名为 AdminInitiateAuth 的函数。还有一些用于将用户附加到身份提供者的功能。因此,虽然使用 JS SDK 可能是最简单的,而且在我看来,这是将 Web 应用程序与 cognito 集成的解决方案。您可以清楚地处理所有身份验证流程、令牌管理、创建 api 以登录、注销等。使用 GO SDK 的服务器端


推荐阅读