Express 带有PassportJS的Chrome扩展的Google认证令牌返回401个未经授权

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扩展,该扩展使用
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?警告:通过查询参数传递令牌是不安全的。