gpt4 book ai didi

express - 来自带有 PassportJS 的 Chrome 扩展的 Google Auth token 返回 401 Unauthorized

转载 作者:行者123 更新时间:2023-12-01 08:12:00 30 4
gpt4 key购买 nike

我正在尝试设置一个 Chrome 扩展,它使用 chrome.identity.getAuthToken 来获取登录用户的身份验证 token ,然后使用它通过使用 Passport 和 passport-google-token 的 Express 服务器进行身份验证策略。

getAuthToken 正在给我 token ,但是当它被发送到我的服务器时,我收到一个 401 unauthorized 错误。

一般来说,我对 Passport 和基于 token 的授权还很陌生,所以我不确定我是否犯了错误或误解了它的工作原理。

我的 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();
});

并且 token 已正确传递到我的回调中。

我这样设置我的 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 和密码来 self 在 Google API 管理器中设置的凭据: Google credentials

如果有人能指出我还需要做什么或我做错了什么,将不胜感激。

最佳答案

这对我来说失败有两个原因。

首先,当我逐步执行一些 passport-google-token 代码时,我意识到,如果 req.body 未定义,它就会失败。我通过添加 body-parser 中间件解决了这个问题。

但主要问题是我在 header 中发送访问 token 的方式。我从 Google sample apps 之一复制了 x.setRequestHeader('Authorization', 'Bearer ' + token);但它实际上需要发送为:

x.setRequestHeader('Access_token', token);

或在查询字符串中为:

var url = "http://localhost:30000/auth/chrome?access_token=" + token;

关于express - 来自带有 PassportJS 的 Chrome 扩展的 Google Auth token 返回 401 Unauthorized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37681540/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com