我正在尝试基于OAuth2orize框架设置oAuth2.0服务器/服务。我有不同的应用程序,它们正在运行自己的登录/身份验证服务。我希望将登录视图/身份验证部分与oAuth2.0服务器/服务分离。我希望身份验证部分由现有应用处理,一旦成功(从外部)进行身份验证,就应将其重定向到我的服务,其余流程应继续进行。我在这里关注授权码流程。我面临的问题是当成功重定向到我的服务时进行身份验证,我试图通过实施通行证自定义策略来对它进行身份验证,而当我重定向以授权端点时,它又无法通过确保登录的验证我被重定向到登录服务。
我的auth 2.0服务正在运行:http:// localhost:3000
根据要求:/ dialog / authorize, 我正在重定向:res.redirect('http:// localhost:57207);外部服务
成功通过身份验证后,我希望收到回调
我实现了一个新的端点:app.post('/ api / authenticate',customAuthentication.signin);
Passport-CustomStrategy实施
passport.use('custom',new CustomStrategy(
function(req, done) {
var user = {};
user.id = req.body.id;
user.name = req.body.name;
user.username = req.body.username;
user.password = 'abcd';
db.users.add(user);
req.logIn(user, function(err) {
if (err) { console.log('error login--'+ err); return next(err); }
});
done(null, user);
}
));
回调端点:
exports.signin = [
passport.authenticate('custom', { failureRedirect: '/login' }),
function(req, res) {
const state = req.query.state;
req.session.returnTo=req.body.requestURI; // returnTo not available I am assigning
//console.log(req.user); user data available
//console.log(req.isAuthenticated()); true
res.redirect(req.session.returnTo); this send me to login service evrytime
});
}
];
会话配置
// Session Configuration
app.use(expressSession({
saveUninitialized : true,
resave : true,
secret : config.session.secret,
store : new MemoryStore(),
key : 'authorization.sid',
cookie : { maxAge: config.session.maxAge},
genid : ()=>{return uuid();},
}));
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods','GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'X-Requested-With, X- HTTP-Method-Override, Content-Type, Accept');
if ('OPTIONS' == req.method) {
res.send(200);
} else {
next();
}
});
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(passport.initialize());
app.use(passport.session());