我在Google应用程序上的帐户关联中使用“ OAuth和Google登录”和“授权代码流”。我已经使用Passport js编写了自己的服务器,并在其中实现了Google身份验证,并将其部署到了Heroku。 我在浏览器中对其进行了测试,它可以正常工作并成功提供访问令牌和刷新令牌,但是我面临的问题是,当我将其与我在google应用上的操作集成时,它可以正确执行身份验证,并且没有将accessToken发送回我应用程序,我不知道应该在“令牌URL”字段中输入什么。下面是服务器的代码。
passport.use(new GoogleStrategy({
// authorizationURL: 'https://accounts.google.com/o/oauth2/auth',
// tokenURL: 'https://www.googleapis.com/oauth2/v3/token',
clientID: keys.googleClientID,
clientSecret: keys.googleClientSecret,
callbackURL: '/auth/google/callback'
},
(accessToken, refreshToken, profile, done) => {
return done(null, {
token: accessToken
})
}
));
app.get(
'/auth/google',
passport.authenticate('google', {
scope: ['profile', 'email']
})
);
app.get('/auth/google/callback',
passport.authenticate('google', {
failureRedirect: '/login'
}),
function(req, res) {
console.log(req.user.token)
res.send(req.user.token)
});
app.get('/', (req, res) => {
res.send('<h1>Hello express</h1>');
});
答案 0 :(得分:1)
虽然我不确定,但似乎您混淆了授权URL 和令牌URL 。
授权URL 是一个向用户显示登录屏幕的页面,最终将使用临时的身份验证代码将用户重定向到Google的重定向URI。
Google将采用验证码并调用您的令牌URL 以获取 auth令牌和刷新令牌 。稍后,它还将使用此URL将刷新令牌交换为新的 auth令牌。
通常,passport.js用于创建OAuth服务的登录屏幕,这与Assistant所需要的相反。因此,不清楚为什么要使用它。
如果您只是希望用户登录其Google帐户以获取其个人资料和电子邮件,也不清楚为什么要使用OAuth-您可以使用Google Sign In for Assistant来获取。
即使您需要其他范围来访问其他Google资源,也可以使用Google Sign for Assistant。参见https://stackoverflow.com/a/50932537/1405634