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

尼山

我已经阅读了此文档:-https : //developers.google.com/identity/sign-in/web/server-side-flow

在最后一步,它接收授权代码,然后显示使用Java或python库接收访问令牌和刷新令牌的示例,但我在nodejs中找不到任何类似的示例。我如何使用nodejs复制相同的示例?我不能只发送帖子或获取请求给某些Google 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 Shan的网站上找到完整的示例,这是一个使用Google API Node.js Client的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}`);
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

编写与客户端javascript和服务器端NodeJs模块一起使用的javascript代码

访问服务器端javascript变量以使用客户端javascript进行操作

为客户端获取服务器身份验证访问令牌以与Google Analytics(分析)配合使用的正确方法

如何使用NodeJS组织构建,服务器,客户端和共享JavaScript代码

刷新令牌-服务器端存储和多个客户端的吊销

跨客户端Google OAuth:在iOS上获取身份验证代码并在服务器上访问令牌

使用从JavaScript客户端收到的令牌在服务器上创建社交连接

如何使用客户端JavaScript调用服务器端NodeJS函数

从服务器端向客户端发送jwt令牌的正确方法是什么?

客户端是否使用收到的相同JWT令牌回叫服务器?

服务器端Google授权

我可以使用客户端访问/刷新令牌来访问服务器上的Google API

Facebook API中的服务器端访问令牌与客户端访问令牌

服务器上使用的Google OAuth 2.0客户端令牌

如何使用asp.net访问服务器端的客户端文件

客户端服务器端模板nodejs

在客户端和服务器端使用相同的呈现代码

在服务器端客户端-服务器TCP上未收到单独的值

如何从服务器端C#代码触发客户端JavaScript?

如何在客户端(JavaScript)上使用服务器端(VB.NET)的返回值?

JSW令牌服务器端(laravel)和/或客户端(角度2)?

用令牌认证客户端和服务器端的正确方法?

获取“facebook 代码”以从服务器端获取长期访问令牌。姜戈

客户端代码更新服务器端代码

尝试在服务器端 NodeJS 上运行 Signalr 客户端

从 Google Apps Script 服务器端代码调用客户端 Javascript

客户端或服务器端生成 PAYFORT 令牌?

获取客户端javascript代码中可用的node.js服务器端对象

我们是否需要在客户端和服务器端都存储访问令牌?