Я хочу реализовать поток предоставления учетных данных клиента Ebay Browse API в Go с помощью пакета oauth2. Вот моя структура conf:
conf := clientcredentials.Config{
ClientID: "My Client ID",
ClientSecret: "My client Secret",
Scopes: []string{"https://api.ebay.com/oauth/api_scope"},
TokenURL: "https://api.sandbox.ebay.com/identity/v1/oauth2/token",
EndpointParams: url.Values{"redirect_uri": {"the RuName"}},
}
Затем я попытался сделать запрос, создав * http.Request:
req, err := http.NewRequest("GET", "https://api.sandbox.ebay.com/buy/browse/v1/item/v1|202117468662|0?fieldgroups=COMPACT", nil)
if err != nil {
log.Fatal(err)
}
ctx := context.Background()
client := conf.Client(ctx)
res, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
Но потом я получаю:
{
"errors" : [ {
"errorId" : 1003,
"domain" : "OAuth",
"category" : "REQUEST",
"message" : "Token type in the Authorization header is invalid:Application",
"longMessage" : "Token type in the Authorization header is invalid:Application"
} ]
}
Оказалось, что при запросе к серверу ресурсов пакет Go устанавливает заголовок авторизации следующим образом:
Authorization: Application Access Token token_string
Итак, я попытался вручную установить тип токена на Bearer, выполнив:
tok, err := conf.Token(ctx)
if err != nil {
log.Fatal(err)
}
client := conf.Client(ctx)
req, err := http.NewRequest("GET", "https://api.sandbox.ebay.com/buy/browse/v1/item/v1|202117468662|0?fieldgroups=COMPACT", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer " tok.AccessToken)
res, err := client.Do(req)
Но я продолжаю получать ту же ошибку.

Итак, есть проблема (ошибка?) С реализацией Ebay спецификации OAuth2.0, и мне пришлось повторно реализовать TokenSource пакета oauth2 / clientcredentials, чтобы установить тип токена на носитель, а не на токен доступа к приложению.