OAuth2orize外部身份验证重定向问题

时间:2020-11-05 16:20:40

标签: node.js express oauth-2.0 passport.js

我正在尝试基于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());

0 个答案:

没有答案
相关问题