簡體   English   中英

Node.js Google OAuth2無效憑據

[英]Nodejs google oAuth2 invalid credentials

我有以下代碼段,允許用戶創建Google日歷事件。 最初,它將檢查用戶是否設置了訪問令牌,否則將啟動常規的oAuth2授權過程,並獲取+保存訪問令牌並刷新用戶配置文件中的令牌。 然后,后續請求將允許用戶通過在其配置文件中設置的訪問令牌創建日歷事件。

這是代碼:

function getNewToken() {
    const authUrl = oauth2Client.generateAuthUrl({
        access_type: 'offline',
        scope: SCOPES
    });
    return authUrl;
}

module.exports = {
    insert(req, res, next) {
        User.findById(req.user._id, (err, user) => {
            if (user.accessToken) {
                oauth2Client.setCredentials({
                    refresh_token: user.refreshToken
                });
                const calendar = google.calendar('v3');
                calendar.events.quickAdd({ auth: oauth2Client, calendarId: 'primary', text: 'Test Calendar' }, (err, data) => {
                    if (err) {
                        next(err);
                    }
                    res.status(200).send('Successfully added calendar event');
                });
            } else {
                const authUrl = getNewToken();
                res.redirect(authUrl);
            }
        });
    },

    googleOauth2Callback(req, res, next) {
        const code = req.query.code;
        oauth2Client.getToken(code, (err, token) => {
            if (err) {
                next(err);
            }
            User.findByIdAndUpdate({ _id: req.user._id }, { accessToken: token.access_token, refreshToken: token.refresh_token }, (err) => {
                if (err) {
                    next(err);
                }
            });
            res.send({ token });
        });
    }
};

但是,我注意到經過一定時間后,出現“ 401無效憑據”錯誤。 我注意到,如果我省略了access_token,而只是在oAuth2Client中設置了刷新令牌,那么一切都會按預期進行。

這是處理oAuth2令牌的正確方法嗎? 我可以僅在API請求中繼續使用刷新令牌嗎? 刷新令牌過期時會發生什么? 任何幫助,將不勝感激。

這是處理oAuth2令牌的正確方法嗎?

據我了解,是的。 令牌的壽命很短,一旦進行訪問將被新的令牌替換。

訪問令牌的壽命有限。 如果您的應用程序需要在單個訪問令牌的生存期之外訪問Google API,則可以獲取刷新令牌。 刷新令牌使您的應用程序可以獲得新的訪問令牌。

我可以僅在API請求中繼續使用刷新令牌嗎?

如果它是作用域的一部分,則可以繼續使用標記。

訪問令牌僅對令牌請求范圍內所述的一組操作和資源有效。 例如,如果為Google+ API頒發了訪問令牌,則它不會授予對Google Contacts API的訪問權限。 但是,您可以多次將該訪問令牌發送到Google+ API,以進行類似操作。

刷新令牌過期時會發生什么?

訪問令牌過期后,應用程序將使用刷新令牌來獲取新令牌。

通常,身份文檔中的此圖充分說明了該過程。

在此處輸入圖片說明

有關客戶端應用程序中的oAuth2的更多信息,請查看文檔的Web Apps部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM