node.js - Api 调用适用于从 Postman 获取的令牌,但不适用于通过 nodejs 应用程序获取的令牌
问题描述
所以我正在尝试对第三方 API 提供商进行 API 调用。在我的 nodejs 应用程序中接收新令牌没有问题,但是当我尝试在 get 函数中使用它时,我只收到 403 错误。但是,如果我通过 Postman 获取令牌,它工作得很好(在应用程序中),这对我来说似乎很奇怪?
如果我尝试在 Postman 的 get 调用中使用从 nodejs 应用程序获取的令牌,它是一样的,它不会工作。
我已经多次检查从我的 nodejs 应用程序获取的令牌是否有任何错误,但无法理解为什么它不起作用。我使用firebase来存储它,它每次都会更新,没有问题。
获取和存储令牌的代码如下所示:
const response = await axios.request(options)
let token = response.data.access_token
console.log(token) // receiving a new token every time, no issues
db.doc(`/company1/tokens`).update(tokenObj = { token: token }).then(
console.log("lagring ferdig")
)
api 调用的代码如下所示:
let doc = await db.collection(`/company1`).doc("tokens").get()
let data = doc.data()
//console.log(data.token)
const request = await fetch(`https://xxxxx/api/v2/company`, {
method: 'GET',
headers: {
Authorization: `Bearer ${data.token}`,
'Content-Type': 'application/json'
}
})
所以澄清一下:如果我只是将通过 Postman 获得的令牌粘贴到 Firestore 文档中,它就可以正常工作。
关于什么会导致这种情况的任何想法?任何帮助深表感谢。
解决方案
因此,当我更改为将它们附加到它起作用的 url 时,范围的设置存在问题。来自“arynaq”的使用 jwt.io 进行令牌故障排除的好技巧。
url: 'https:/xxxxxx/oauth/token?openid%20email%20profile%20read:findata%20create:findata',
method: 'POST',
headers: { 'content-type': 'application/json' },
data: {
grant_type: 'password',
username: process.env.UNAME,
password: process.env.PW,
audience: 'https://xxxxxxxxx.no',
//scope: 'openid%20email%20profile%20read:findata%20create:findata', <-- this did not work
client_id: process.env.CID,
client_secret: process.env.CS
}
推荐阅读
- vue.js - Apexcharts 十字准线工具提示
- java - 将行为添加到 Wicket 选项卡
- c# - 获取 VS 2017 中列出的 C# 7.3
- php - 我有一个下面的数组,其中一些相同的键具有不同的值。如何在 PHP 中将相同的键值与该键组合?我正在使用 WAMP,Codeigniter
- scala - `org.quartz.core.jobrunshell throw an unhandled exception`异常的原因是什么?
- spring - 使用 Spring + Jedis 设置时,排序集如何存储在 redis 中?
- image-processing - 更改区域 ImageMagick 的颜色
- heroku - 在 heroku 上使用 fabric.js 部署一个 Angular 6 应用程序
- java - 查询 Firestore 数据并为所有匹配查询的文档添加一个字段
- python - matplotlib 嵌入在 wxPython 中,带有导航工具栏坐标