如何在 Express.js 服务器上执行 JWT API 请求? (edX API)

Posted

技术标签:

【中文标题】如何在 Express.js 服务器上执行 JWT API 请求? (edX API)【英文标题】:How to perform JWT API request on Express.js server? (edX API) 【发布时间】:2018-10-16 14:45:05 【问题描述】:

对于大多数人来说,这可能是一个超级简单的答案,但我是后端新手。我正在使用 Express.js 来实现我的服务器,并且我需要从 edX API 检索课程。以下是他们在文档中提出的示例请求:

curl -X GET -H "Authorization: JWT access token" https://api.edx.org/catalog/v1/catalogs/

我似乎找不到如何将其转换为 Express.js 实现的起点。我能够使用“request-promise”对另一个 API 执行类似的请求),但这是第一个需要 JWT Auth...

这里的文档:http://course-catalog-api-guide.readthedocs.io/en/latest/course_catalog/catalog.html#get-a-list-of-all-course-catalogs

提前致谢!

【问题讨论】:

【参考方案1】:

我们如何使用HTTP AUTH 执行请求?

来自这个 Github 问题:Bearer Token

请查看Request documentation。请求-承诺有效 一样的。

使用request 模块:

request.get('https://some.server.com/',"auth":"bearer":"theToken")

使用request-promise 模块:

我们知道它是 request,所以我们可以构建这样的选项:

var options = 
 "url":APIURL,
 "headers":"User-Agent":"client",
 "auth":"bearer":ACCESSTOKEN


所以现在您甚至可以在您的 express 应用中创建一个路由,使用客户端令牌执行查询:

app.get("/query-with-token/:accessToken",(req,res)=>
 var accessToken = req.params.accessToken
 if(accessToken)
   console.log(accessToken);
   RequestAPI((error, apiResponse)=> //this would be a custom function of yours
     if(!error)res.send(apiResponse)
     elseres.send("ERROR: "+error)
   )
 elseres.send("no token supplied")
)

(出于安全原因,不建议使用此方法)

【讨论】:

【参考方案2】:

事实证明它与上面的超级相似,但设置不同(使用 request-promise 库):

request.get('https://api.edx.org/catalog/v1/catalogs/', 
 "url":APIURL,
 "headers":
    "Authorization": "JWT access token",
    "User-Agent": "client"
  
);

来源:Using an authorization header with Fetch in React Native

【讨论】:

以上是关于如何在 Express.js 服务器上执行 JWT API 请求? (edX API)的主要内容,如果未能解决你的问题,请参考以下文章

在 Express.js 中刷新 JWT

Node.js - Express.js JWT 总是在浏览器响应中返回一个无效的令牌错误

存储 JWT 服务器端 express.js

如何从标头中正确获取 jwt 令牌并将其与 express 一起使用

express js,拒绝连接到来自其他计算机的端点

关于 JWT(服务器端和客户端)的一些基本问题