我正在尝试通过Google-Auth-Library以编程方式获取Google访问令牌。我已经有一个client_id,client_secret和刷新令牌。我确实从Google文档1复制了代码,但得到Error: invalid_request Required parameter is missing: response_type
我尝试在代码中的许多地方添加response_type: 'code'
,但是得到的响应却相同……我应该在哪里放置此参数?
const {OAuth2Client} = require('google-auth-library');
const http = require('http');
const url = require('url');
const open = require('open');
const destroyer = require('server-destroy');
const keys = require('./oauth2.keys.json');
async function main() {
try {
const oAuth2Client = await getAuthenticatedClient();
const url = 'https://accounts.google.com/o/oauth2/v2/auth';
const res = await oAuth2Client.request({url});
console.log(res.data);
const tokenInfo = await oAuth2Client.getTokenInfo(
oAuth2Client.credentials.access_token
);
console.log(tokenInfo);
}
catch (err) {
console.log(`oauth2: ${err}`);
}
}
function getAuthenticatedClient() {
return new Promise((resolve, reject) => {
const oAuth2Client = new OAuth2Client(
keys.web.client_id,
keys.web.client_secret,
keys.web.redirect_uris[0]
);
const authorizeUrl = oAuth2Client.generateAuthUrl({
access_type: 'offline',
scope: 'https://www.googleapis.com/auth/youtube',
});
const server = http
.createServer(async (req, res) => {
try {
if (req.url.indexOf('/oauth2callback') > -1) {
// acquire the code from the querystring, and close the web server.
const qs = new url.URL(req.url, 'http://localhost:3000')
.searchParams;
const code = qs.get('code');
console.log(`Code is ${code}`);
res.end('Authentication successful! Please return to the console.');
server.destroy();
const r = await oAuth2Client.getToken(code);
// Make sure to set the credentials on the OAuth2 client.
oAuth2Client.setCredentials(r.tokens);
console.info('Tokens acquired.');
resolve(oAuth2Client);
}
} catch (e) {
reject(e);
}
})
.listen(3000, () => {
// open the browser to the authorize url to start the workflow
open(authorizeUrl, {wait: false}).then(cp => cp.unref());
});
destroyer(server);
});
}
main();
请注意,与文档相比,出于我的项目目的,URL(oauth2)和范围URL(youtube范围)已更改。
[1] https://github.com/googleapis/google-auth-library-nodejs