Api 调用适用于从 Postman 获取的令牌,但不适用于通过 nodejs 应用程序获取的令牌
Posted
技术标签:
【中文标题】Api 调用适用于从 Postman 获取的令牌,但不适用于通过 nodejs 应用程序获取的令牌【英文标题】:Api call works with token acquired from Postman, but not from the token acquired via nodejs app 【发布时间】:2021-05-09 04:03:50 【问题描述】:所以我正在尝试对第三方 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 文档中,它就可以正常工作。
知道什么会导致这种情况吗?非常感谢任何帮助。
【问题讨论】:
在 jwt.io 中粘贴两个版本的令牌并进行比较,可能您在节点应用程序中获取令牌的方式有误,比较并看看有什么区别以获得提示到哪里看。您在节点应用中对令牌的请求可能不正确。 非常感谢,发现使用这个的范围有问题。 【参考方案1】:原来,范围设置存在问题,当我更改为将它们附加到有效的 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
【讨论】:
以上是关于Api 调用适用于从 Postman 获取的令牌,但不适用于通过 nodejs 应用程序获取的令牌的主要内容,如果未能解决你的问题,请参考以下文章
将 Postman“获取新的授权令牌”转换为 curl 命令
使用 JWT 访问 Rest API 适用于 Postman 但不适用于 Axios
如何从 Django 在前端获取 CSRF 令牌以及如何在 Postman 中使用它
POST 请求适用于 Postman,但不适用于 Guzzle