将外部身份提供者与服务器端身份验证结合使用

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

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

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


开心每一天1111
浏览 144回答 3
3回答

慕桂英546537

让我们以 Facebook 为例。当您使用 Cognito UI 时,Facebook 会为您的用户将 OAuth 令牌直接交给 Cognito。Cognito 会做一些事情,比如检查用户是否已经存在,并在需要时创建一个新用户,然后向您的应用程序发送一个 AWS OAuth 令牌。现在,如果您想要在自己的网站上使用 Facebook 按钮,则身份验证会以不同的方式进行。您必须自己与 Facebook 协商,为用户取回 OAuth 令牌,然后将访问令牌交给 Cognito。Cognito 会做它的事情并给你一个 AWS OAuth 令牌。

杨__羊羊

您的应用程序要求已经超过了使用千篇一律的 Cognito 登录流程的程度。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());        });    }在这里您可以看到一个名为 AdminInitiateAuth 的函数。还有将用户附加到身份提供者的功能。因此,虽然使用 JS SDK 可能是最简单的,但在我看来,这是将 Web 应用程序与 Cognito 集成的解决方案。您可以清楚地处理所有身份验证流程、令牌管理、创建 api 以登录、注销等。服务器端使用 GO SDK

哔哔one

现在可以使用identity_providerprop in oauth2/authorizerequest在我的代码中看起来像const query = stringify({    response_type: 'code',    redirect_uri: tokenRedirectUri,    state: stateEncoded,    client_id: clientId,    identity_provider: platform,})return `https://auth.${domainName}/oauth2/authorize?${query}`//其他 OIDC 提供商等platform在哪里GoogleFacebook那只是url,你需要自己制作按钮,但它会直接重定向到提供者同意
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go