【发布时间】:2021-07-18 09:59:21
【问题描述】:
我有一个 Javascript 后端(带有 Express + Passport 的 NestJS)。
我想将复杂的身份验证(例如社交身份验证)外包给 Cognito,但要避免被锁定。我想知道我是否可以使用 Cognito 作为 Passport 中的提供者,类似于社交提供者(谷歌、Facebook 等) .这样一来,我就可以整合许多供应商,而只需整合一个供应商。我仍然会在我自己的应用程序中管理用户数据、授权等,因此,如果我将来想这样做,我可以在我自己的应用程序中实现 Google、Facebook 等社交身份验证并摆脱 Cognito。
如果我理解正确this is possible with Auth0.
理想情况下,我想实现一个 OAuth 流程,在该流程中,用户被重定向到一个简单的“注册/登录”Cognito 应用程序,登录后被重定向到我的应用程序中接收用户数据的回调 URL。如果 AWS 没有为此提供解决方案,我也可以使用他们的 UI 元素来构建和托管这个应用程序。
如果作为提供者/策略实施,这可能很简单:
passport.use(new CognitoStrategy({
key: KEY,
secret: SECRET,
callbackURL: "http://www.example.com/auth/cognito/callback"
},
function(token, tokenSecret, profile, done) {
User.findOrCreate({ uuid: profile.id }, function (err, user) {
return done(err, user);
});
}
));
app.get('/auth/cognito', passport.authenticate('cognito'));
app.get('/auth/cognito/callback',
passport.authenticate('cognito', { failureRedirect: '/auth/cognito' }),
function(req, res) {
res.redirect('/');
});
有解决办法吗?这在原则上有意义吗?我是否遗漏了多对一想法的任何复杂性?
相关资源:
【问题讨论】:
-
如果你想从事本地战略,看看npmjs.com/package/authentication-flows-js
标签: oauth-2.0 passport.js amazon-cognito idp