在 Ebay Browse API 上缺少用于授权的访问令牌

Posted

技术标签:

【中文标题】在 Ebay Browse API 上缺少用于授权的访问令牌【英文标题】:Missing access token for authorization on Ebay Browse API 【发布时间】:2018-12-27 04:39:39 【问题描述】:

我尝试从 eBay API 搜索项目。在我的Apollo Server 2 的server.js 文件中,我在实例化时通过上下文属性传递令牌字符串(s. Doku:Apollo context argument)。因此,每个请求都包含身份验证 HTTP 标头属性。作为试用,目前,我只使用固定的令牌字符串。如果我为客户工作,这将在以后更改。

server.js

import  ApolloServer  from 'apollo-server'
import schema from './schema'

const server = new ApolloServer(
   schema,
   context: ( req ) => 
        const token = 'Bearer v^1.1#i^1#I^3#f^0#p^1#r^0#t^H4sIAAA...' // my token

        return 
             ...req,
             headers:         
                 ...req.headers,
                 // enrich the header with oauth token
                 authorization: token,
             ,
        
    ,
)

server.listen().then(( url ) => console.log(`???? Server ready at $url`))

解析器方法

// A map of functions which return data for the schema.
const resolvers = 
    Query: 
       books(root,  keyword = '' , context) 
          console.log(context.headers)
           fetch(`https://api.ebay.com/buy/browse/v1/item_summary/?q=$keyword`)
             .then(response => response.json())
             .then(json => console.log(json))

           return []
     
   

context.header 包含授权属性:

 host: 'localhost:4000',
  connection: 'keep-alive',
  'content-length': '108',
  accept: '*/*',
  origin: 'http://localhost:4000',
  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
  dnt: '1',
  'content-type': 'application/json',
  referer: 'http://localhost:4000/',
  'accept-encoding': 'gzip, deflate, br',
  'accept-language': 'de,en;q=0.9',
  authorization: 'Bearer v^1.1#i^1#f^0#p^1#r^0#I^3#t^H4sIAAAAAAAAAOV...' 
 

JSON 响应包含 errorId 1002 错误。它说 授权 HTTP 请求标头中缺少访问令牌。

 errors:
   [  errorId: 1002,
      domain: 'OAuth',
      category: 'REQUEST',
      message: 'Missing access token',
      longMessage: 'Access token is missing in the Authorization HTTP request header.'  ] 

此外,我使用新的浏览器选项卡,输入 URL https://api.ebay.com/buy/browse/v1/item_summary/search?q=test 并添加相同的授权标头属性(我使用 ModHeader chrome extension)。我按 Enter 键,请求有效,我得到了预期的 JSON。

这令人困惑,我不知道在传递令牌时我做错了什么。有人有想法吗?

【问题讨论】:

【参考方案1】:

您看到的标头是在请求中发送到您的 GraphQL 服务器的标头。您所做的只是修改它们以包含 Authorization 标头,然后将您的整个请求对象包含为您的上下文 - 您没有将任何标头信息传递给实际从 eBay 获取数据的 fetch 调用。至少,你想做这样的事情:

fetch(`https://api.ebay.com/buy/browse/v1/item_summary/?q=$keyword`, 
  headers: 
    Authorization: context.headers.authorization,
  ,
)

还请记住,fetch 调用应在解析器中返回,否则不会等待。

【讨论】:

以上是关于在 Ebay Browse API 上缺少用于授权的访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

如果通过 Zuul API 网关发送请求,则缺少授权标头

仅在生产中缺少授权标头

使用概念 API 进行授权时出现错误“缺少或无效的 redirect_uri”

如何从 eBay 交易中获取卖家的 PayPal 账户

Spotify Web API - 缺少 401 权限

使用eBay API基本步骤介绍