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

如何在前端的 Javascript Ajax API 调用中隐藏我的 JWT 令牌?

通过 API POSTMAN 在 Stripe 中创建卡令牌