使用从客户端接收到的谷歌授权代码在服务器端获取访问令牌javascript(nodejs)

我已经通过这个文档: – https://developers.google.com/identity/sign-in/web/server-side-flow

在最后一步它会收到授权码,然后显示使用java或python库接收访问令牌和刷新令牌的例子,但是我无法在nodejs中find任何类似的例子。 我怎样才能复制使用nodejs相同的例子? 我不能只发送一个post或获得一些谷歌oauth api的请求,并使用授权码接收访问令牌?

提前致谢 :)

Google API Node.js客户端库提供了oauth2Client.getToken(code, cb) ,通过授权代码交换访问令牌(以及可选的刷新令牌):

 oauth2Client.getToken(code, function (err, tokens) { // Now tokens contains an access_token and an optional refresh_token. Save them. if (!err) { oauth2Client.setCredentials(tokens); } }); 

官方示例可在https://github.com/google/google-api-nodejs-client/tree/master/samples获得,其中包括oauth2.js ,oauth部分的助手

您也可以在Paul 网站上find一个完整的示例,这是一个使用Google API Node.js客户端的nodejs示例。 编辑ClientIdClientSecret ,运行此示例并转到http://127.0.0.1:8081

 var http = require('http'); var express = require('express'); var Session = require('express-session'); var google = require('googleapis'); var plus = google.plus('v1'); var OAuth2 = google.auth.OAuth2; const ClientId = "YOUR_CLIENT_ID"; const ClientSecret = "YOUR_CLIENT_SECRET"; const RedirectionUrl = "http://localhost:8081/oauthCallback"; var app = express(); app.use(Session({ secret: 'raysources-secret-19890913007', resave: true, saveUninitialized: true })); function getOAuthClient() { return new OAuth2(ClientId, ClientSecret, RedirectionUrl); } function getAuthUrl() { var oauth2Client = getOAuthClient(); // generate a url that asks permissions for Google+ and Google Calendar scopes var scopes = [ 'https://www.googleapis.com/auth/plus.me' ]; var url = oauth2Client.generateAuthUrl({ access_type: 'offline', scope: scopes, //use this below to force approval (will generate refresh_token) //approval_prompt : 'force' }); return url; } app.use("/oauthCallback", function(req, res) { var oauth2Client = getOAuthClient(); var session = req.session; var code = req.query.code; oauth2Client.getToken(code, function(err, tokens) { console.log("tokens : ", tokens); // Now tokens contains an access_token and an optional refresh_token. Save them. if (!err) { oauth2Client.setCredentials(tokens); session["tokens"] = tokens; res.send(` <html> <body> <h3>Login successful!!</h3> <a href="/details">Go to details page</a> <body> <html> `); } else { res.send(` <html> <body> <h3>Login failed!!</h3> </body> </html> `); } }); }); app.use("/details", function(req, res) { var oauth2Client = getOAuthClient(); oauth2Client.setCredentials(req.session["tokens"]); var p = new Promise(function(resolve, reject) { plus.people.get({ userId: 'me', auth: oauth2Client }, function(err, response) { console.log("response : ", response); resolve(response || err); }); }).then(function(data) { res.send(`<html><body> <img src=${data.image.url} /> <h3>Hello ${data.displayName}</h3> </body> </html> `); }) }); app.use("/", function(req, res) { var url = getAuthUrl(); res.send(` <html> <body> <h1>Authentication using google oAuth</h1> <a href=${url}>Login</a> </body> </html> `) }); var port = 8081; var server = http.createServer(app); server.listen(port); server.on('listening', function() { console.log(`listening to ${port}`); });