amazon-web-services - 将外部身份提供程序与服务器端身份验证一起使用
问题描述
我正在使用 AWS SDK for Go 来使用 Cognito 进行服务器端身份验证。我已完成注册和登录,并使用用户名和密码工作。我根据文档以及重定向 URL 和文档要求的所有其他内容配置了所有三个外部身份提供程序。
我知道如何获取 Cognito 将为您构建的已构建注册/登录页面的 URL,并且这些页面具有 Google/Facebook/Amazon 登录按钮,但我需要能够将这些按钮放在前端我的网站。我不知道该怎么做。
编辑:请参阅@Stu 帖子的评论,详细了解为什么 JS SDK 答案被标记为正确答案。这可能会改变,但不会暂时改变。(tldr;aws go sdk 和 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
更新:再来一次。
在这里您可以看到一个名为 AdminInitiateAuth 的函数。还有一些用于将用户附加到身份提供者的功能。因此,虽然使用 JS SDK 可能是最简单的,而且在我看来,这是将 Web 应用程序与 cognito 集成的解决方案。您可以清楚地处理所有身份验证流程、令牌管理、创建 api 以登录、注销等。使用 GO SDK 的服务器端
推荐阅读
- mysql - 为什么mysql和perl base64字符串编码不同?
- python - 没有 Lambda 重试的 Python 中的 AWS Lambda 处理错误
- python - 交叉验证模型拟合的可视化方法
- go - golang-echo-realworld-example-app 的存储库模式
- java - Axon amqp 消息传递,未触发事件处理程序
- keras - 在训练期间恢复非规范化数据
- java - 如何使用 java 代码发布 jcr 节点?
- vba - 排序如何影响约会搜索的结果?
- java - 使用 Arraylist Java 进行选举
- vue.js - 在 VuePress 中显示 Vue 组件