编程语言
首页 > 编程语言> > javascript – 使用Node JS对Google API进行身份验证

javascript – 使用Node JS对Google API进行身份验证

作者:互联网

到目前为止,我的应用程序重定向到同意页面.用户接受,然后我使用有效的授权码重定向回localhost.根据我的理解,我需要进行另一次调用并将此代码交换为访问令牌.但是,getAccessToken()不起作用.控制台日志返回:

invalid_client
invalid_request

请告诉我需要哪些其他信息.

这是相关的代码:

var { google } = require('googleapis');
var http = require("http");
var request = require('request');

var oauth2Client = new google.auth.OAuth2(
    '<My Client ID>',
    '<My Client Secret>',
    'http://localhost:8080'
);

exports.generateAuthCodeUrl = function () {

    const url = oauth2Client.generateAuthUrl({
        access_type: 'offline',
        scope: 'https://www.googleapis.com/auth/blogger'
    });

    return url;
};


exports.getAccessToken = function (accessCode) {
    var codeOptions = {
        code: accessCode
    }
    oauth2Client.getToken(codeOptions, function (err, tokens) {
        // Now tokens contains an access_token and an optional refresh_token. Save them.
        if (!err) {
            oauth2Client.setCredentials(tokens);
            return tokens;
        }
        console.log(err.message);
    });
};

编辑:摘要以及对我有用的内容

我从pinoyyid的答案TWICE中读到链接的文章,并且还注意到他的答案中列出的步骤.列出简单的步骤有助于我更清楚地理解.此外,根据评论中的建议,我删除了googleapi库(上面提到的错误发生在此库的代码中),并且只是使用请求库定期调用必要的端点.我使用了请求,因为它不那么冗长.我最终得到的代码如下所示:

exports.generateAuthCodeUrl = function () {

    var authURL = "https://accounts.google.com/o/oauth2/v2/auth?" +
        "client_id=" + client_id +
        "&scope=" + scope +
        "&redirect_uri=" + redirect_uri +
        "&response_type=" + response_type;

    //redirect to consent page
    return authURL;  
};

exports.getAccessToken = function (x) {
    var postDataUrl = 'https://www.googleapis.com/oauth2/v4/token?' +
        'code=' + x +  //auth code received from the previous call
        '&client_id=' + client_id +
        '&client_secret=' + client_secret +
        '&redirect_uri=' + redirect_uri +
        '&grant_type=' + "authorization_code"

    var options = {
        uri: postDataUrl,
        method: 'POST'
    };

    request(options, function (err, res, body) {
        return body; //returns an object with an access token!!!
    });
};

很高兴我得到了这个工作!非常感谢你们

解决方法:

Dummy的三脚Google OAuth指南.

从字面上看,您需要知道的一切都在这个单页https://developers.google.com/identity/protocols/OAuth2WebServer上.阅读两次,你将成为OAuth忍者.总之,它说……

>使用4个查询参数构建accounts.google.com网址: –

> client_id以识别您的应用
>范围说明您要求的权限
> redirect_uri告诉Google将用户浏览器的结果重定向到哪里
> response_type =代表你想要一个验证码

>将用户的浏览器重定向到该URL
>在用户登录时喝一口咖啡,选择他的Google帐户,并授予许可,直到最终……
>用户的浏览器被重定向回应用程序的redirect_uri,并带有一次代码查询参数,这是一次性验证码
>将验证码发布到Google的令牌端点
>解析JSON响应以获取访问令牌
>在“authorization:bearer access_token”http标头中使用访问令牌,以用于后续的Google API请求

如果您转到https://developers.google.com/oauthplayground/,则可以在线执行这些步骤,以查看各种URL和响应的外观.

标签:javascript,node-js,google-api,google-oauth
来源: https://codeday.me/bug/20191006/1861333.html