我尝试在节点中开发一个简单的API并将其隐藏在google身份验证层之后,因为我使用passport-google-oauth2强制执行google身份验证以执行某些请求。
....
var GoogleStrategy = require('passport-google-oauth2').Strategy;
var passport = require('passport');
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(user, done) {
done(null, user);
});
passport.use(new GoogleStrategy({
clientID: CLIENT_ID,
clientSecret: CLIENT_SECRET,
callbackURL: "/oauth2callback",
passReqToCallback : true
},
function(request, accessToken, refreshToken, profile, done) {
console.log("passportUse access Profile ", accessToken);
done(null, accessToken);
}
));
app.get('/oauth2callback',
passport.authenticate( 'google', {
successRedirect: '/notesSuccess',
failureRedirect: '/notesNotSuccess'
}));
app.get('/notes',
passport.authenticate('google', { scope:
[ 'https://www.googleapis.com/auth/plus.login', 'https://www.googleapis.com/auth/drive'] }
), function(req, res) {
//res.json({notes: "This is your notebook. Edit this to start saving your notes!"})
})
app.get('/notesSuccess', function(req, res) {
res.json({notes: "This is your notebook. Edit this to start saving your notes!"})
})
app.get('/notesNotSuccess', function(req, res) {
res.json({notes: "AUTHENTICATION FAIL"})
})
app.get('/notes/API1', function(req, res) {
res.json({notes: "API1111111"})
})
....
代码工作或多或少,passport.use
我确实获得了所有google plus个人资料信息和令牌,因此我认为该部分正在运行。
问题在于,当我使用浏览器访问localhost:8080/notes
时,我会在登录时获得预期结果(/notesSuccess
),如果我在私人窗口中,我可以看到谷歌登录页面,到目前为止运作良好。
我的问题是,如果我使用我给出的令牌或者具有相同范围的新令牌对邮递员进行查询,我只获得登录页面(就好像我没有Authentification标头)。如果我查询notes/API1
(那里没有Oauth),它可以正常运行
为什么标题不能验证查询的任何想法?