Express 带有PassportJS的Chrome扩展的Google认证令牌返回401个未经授权
我正在尝试设置一个Chrome扩展,该扩展使用Express 带有PassportJS的Chrome扩展的Google认证令牌返回401个未经授权,express,google-chrome-extension,passport.js,google-authentication,Express,Google Chrome Extension,Passport.js,Google Authentication,我正在尝试设置一个Chrome扩展,该扩展使用Chrome.identity.getAuthToken获取登录用户的身份验证令牌,然后使用Passport和该策略通过Express服务器进行身份验证 getAuthToken正在给我令牌,但是当它被发送到我的服务器时,我得到了一个401未经授权的错误 一般来说,我对Passport和基于代币的授权还比较陌生,所以我不确定我是否犯了错误或误解了它的工作原理 我的chrome扩展可执行以下操作: chrome.identity.getAuthToke
Chrome.identity.getAuthToken
获取登录用户的身份验证令牌,然后使用Passport和该策略通过Express服务器进行身份验证
getAuthToken
正在给我令牌,但是当它被发送到我的服务器时,我得到了一个401未经授权的错误
一般来说,我对Passport和基于代币的授权还比较陌生,所以我不确定我是否犯了错误或误解了它的工作原理
我的chrome扩展可执行以下操作:
chrome.identity.getAuthToken({"interactive": true}, function(token){
var url = "http://localhost:30000/auth/chrome";
var x = new XMLHttpRequest();
x.open("GET", url);
x.setRequestHeader('Authorization', "Bearer " + token);
x.send();
});
令牌正在正确地传递到我的回调中
我将Express服务器和Passport策略设置为:
import * as express from "express";
import * as passport from "passport";
const GoogleTokenStrategy = require("passport-google-token").Strategy;
// set up Express and Passport...
passport.use(new GoogleTokenStrategy({
clientID: --client id--,
clientSecret: --client secret--
}, (accessToken, refreshToken, profile, done) => {
return done(null, profile);
}));
app.get('/auth/chrome', passport.authenticate("google-token"), (req, res) => {
res.send(req.user);
});
客户端ID和密码来自我在Google API管理器中设置的凭据:
如果有人能指出我还需要做什么或我做错了什么,我将不胜感激。这对我来说有两个失败的原因
首先,当我通过一些passport-google-token
代码时意识到,如果req.body
未定义,它将失败。我通过添加主体解析器
中间件解决了这个问题
但主要的问题是我在头中发送访问令牌的方式。我复制了x.setRequestHeader('Authorization'、'Bearer'+令牌)代码>来自其中一个,但它实际上需要作为:
x.setRequestHeader('Access_token', token);
或在查询字符串中显示为:
var url = "http://localhost:30000/auth/chrome?access_token=" + token;
您在哪里指定了重定向url?警告:通过查询参数传递令牌是不安全的。