我的前端應用程序是使用gmail帳戶進行身份驗證。如何在服務器端驗證節點js中的Google身份驗證令牌?
我找回id_token後驗證成功並把它作爲認證頭爲承載令牌。
E.g. http://localhost:4000/api
授權承載token_id
在的NodeJS服務器端,我調用下面的方法來驗證令牌。
exports.verifyUser = function(req, res, next) {
var GoogleAuth = require('google-auth-library');
var auth = new GoogleAuth();
var client = new auth.OAuth2(config.passport.google.clientID, config.passport.google.clientSecret, config.passport.google.callbackURL);
// check header or url parameters or post parameters for token
var token = "";
var tokenHeader = req.headers["authorization"];
var items = tokenHeader.split(/[ ]+/);
if (items.length > 1 && items[0].trim().toLowerCase() == "bearer") {
token = items[1];
}
if (token) {
var verifyToken = new Promise(function(resolve, reject) {
client.verifyIdToken(
token,
config.passport.google.clientID,
function(e, login) {
console.log(e);
if (login) {
var payload = login.getPayload();
var googleId = payload['sub'];
resolve(googleId);
next();
} else {
reject("invalid token");
}
}
)
}).then(function(googleId) {
res.send(googleId);
}).catch(function(err) {
res.send(err);
})
} else {
res.send("Please pass token");
}
}
當我調用上面的方法,我總是得到憑證無效具有以下錯誤響應。
Error: No pem found for envelope: {"alg":"RS256","kid":"c1ab5857066442ea01a01601
850770676460a712"}
at OAuth2Client.verifySignedJwtWithCerts (\node_modules\google-auth-libr
ary\lib\auth\oauth2client.js:518:13)
- 這是爲了驗證令牌正確的方法?
- 我是否將id_token作爲授權承載發送?或者僅用於授權?
- 如何將id_token發送到服務器端?通過URL,標題?
- 我在做什麼錯?
任何幫助,高度讚賞。
請你能回答我的其他問題在後? –
我已更新我的帖子,希望它有幫助 –
「您可以在授權標頭中發送JWT令牌,沒有問題」 - >但這不是授權標頭,它用於驗證,我認爲方法不同。如果有人必須同時發送(身份驗證和授權),該怎麼辦? –