缺少用于在 Ebay 浏览器上授权的访问令牌 API
Missing access token for authorization on Ebay Browse API
我尝试从 eBay 搜索商品 API。在我 Apollo Server 2, I pass the token string by context property while instantiation (s. Doku: Apollo context argument 的 server.js 文件中。所以每个请求都包含身份验证 HTTP header 属性。作为试用,现在,我只使用固定的标记字符串。如果我为客户工作,这将在以后更改。
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 请求中缺少访问令牌 header。:
{ errors:
[ { errorId: 1002,
domain: 'OAuth',
category: 'REQUEST',
message: 'Missing access token',
longMessage: 'Access token is missing in the Authorization HTTP request header.' } ] }
此外,我使用新的浏览器选项卡,输入URLhttps://api.ebay.com/buy/browse/v1/item_summary/search?q=test and add the same authorization header property (I use the ModHeader chrome extension)。我按回车键,请求有效,我得到了预期的 JSON.
这很混乱,我不知道在传递令牌时我做错了什么。有人有想法吗?
您看到的 headers 是在请求中发送到您的 GraphQL 服务器的那些。您所做的只是修改它们以包含授权 header,然后将您的整个请求 object 作为您的上下文——您没有将任何 header 信息传递给 fetch
调用实际从 eBay 获取数据。至少,你想做这样的事情:
fetch(`https://api.ebay.com/buy/browse/v1/item_summary/?q=${keyword}`, {
headers: {
Authorization: context.headers.authorization,
},
})
另请记住,fetch
调用应在您的解析器中返回,否则将不会等待。
我尝试从 eBay 搜索商品 API。在我 Apollo Server 2, I pass the token string by context property while instantiation (s. Doku: Apollo context argument 的 server.js 文件中。所以每个请求都包含身份验证 HTTP header 属性。作为试用,现在,我只使用固定的标记字符串。如果我为客户工作,这将在以后更改。
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 请求中缺少访问令牌 header。:
{ errors:
[ { errorId: 1002,
domain: 'OAuth',
category: 'REQUEST',
message: 'Missing access token',
longMessage: 'Access token is missing in the Authorization HTTP request header.' } ] }
此外,我使用新的浏览器选项卡,输入URLhttps://api.ebay.com/buy/browse/v1/item_summary/search?q=test and add the same authorization header property (I use the ModHeader chrome extension)。我按回车键,请求有效,我得到了预期的 JSON.
这很混乱,我不知道在传递令牌时我做错了什么。有人有想法吗?
您看到的 headers 是在请求中发送到您的 GraphQL 服务器的那些。您所做的只是修改它们以包含授权 header,然后将您的整个请求 object 作为您的上下文——您没有将任何 header 信息传递给 fetch
调用实际从 eBay 获取数据。至少,你想做这样的事情:
fetch(`https://api.ebay.com/buy/browse/v1/item_summary/?q=${keyword}`, {
headers: {
Authorization: context.headers.authorization,
},
})
另请记住,fetch
调用应在您的解析器中返回,否则将不会等待。