为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
开心每一天1111 2023-04-17 16:02:14
我正在使用适用于 Go 的 AWS 开发工具包来使用 Cognito 进行服务器端身份验证。我已经完成注册和登录并使用用户名和密码工作。我根据文档以及重定向 URL 和文档要求的所有其他内容配置了所有三个外部身份提供者。我知道如何获取 Cognito 将为您构建的内置注册/登录页面的 URL,并且这些页面具有 Google/Facebook/Amazon 登录按钮,但我需要能够将这些按钮放在前端我的网站。我不知道该怎么做。编辑:请参阅@Stu 帖子的评论,了解为什么将 JS SDK 答案标记为正确答案的详细推理。这可能会发生变化,但暂时不会。(tldr;aws go sdk 和 cognito 还不支持这个)
查看完整描述

3 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

让我们以 Facebook 为例。当您使用 Cognito UI 时,Facebook 会为您的用户将 OAuth 令牌直接交给 Cognito。Cognito 会做一些事情,比如检查用户是否已经存在,并在需要时创建一个新用户,然后向您的应用程序发送一个 AWS OAuth 令牌。

现在,如果您想要在自己的网站上使用 Facebook 按钮,则身份验证会以不同的方式进行。您必须自己与 Facebook 协商,为用户取回 OAuth 令牌,然后将访问令牌交给 Cognito。Cognito 会做它的事情并给你一个 AWS OAuth 令牌。


查看完整回答
反对 回复 2023-04-17
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

您的应用程序要求已经超过了使用千篇一律的 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


查看完整回答
反对 回复 2023-04-17
?
哔哔one

TA贡献1854条经验 获得超8个赞

现在可以使用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,你需要自己制作按钮,但它会直接重定向到提供者同意


查看完整回答
反对 回复 2023-04-17
  • 3 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信