首页 > 解决方案 > 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 文档中,它就可以正常工作。

关于什么会导致这种情况的任何想法?任何帮助深表感谢。

标签: node.jsapijwtpostman

解决方案


因此,当我更改为将它们附加到它起作用的 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
      }

推荐阅读