Как получить ответ с JWT в Golang

Vinícius Dias спросил: 13 июня 2018 в 11:08 в: go

Я пытаюсь получить ответ от API, который использует токен JSON Web, мне нужно использовать заголовок: {Авторизация: "Знак переноса"} Но я хотел бы сохранить тайм-аут http.Client, который я использую. Как я мог это сделать?

    var myClient = &http.Client{Timeout: 10 * time.Second}func getJson(url string, target interface{}) error {
    r, err := myClient.Get(url)
    if err != nil {
        return err
    }
    defer r.Body.Close()    return json.NewDecoder(r.Body).Decode(target)
}

2 ответа

Есть решение
David Maze ответил: 13 июня 2018 в 11:17

net / http.Request имеет поле Header, которое вы можете редактировать напрямую, но это означает, что вы не можете использовать метод shortcut client.Get. Что-то более похожее:

req, err := http.NewRequest(http.MethodGet, url, nil)
if err != nil {
        return err
}
req.Header = map[string][]string{
        "Authorization": {fmt.Sprintf("Bearer %s", jwt)},
}
r, err := myClient.Do(req)
...
Johnny ответил: 14 июня 2018 в 10:18

Вы можете сделать что-то вроде этого,

func getJson(url string, target interface{}) error {
req, err := http.NewRequest(http.MethodGet, url, nil)
if nil != err {
    return err
}
r, err := myClient.Do(req)
if err != nil {
    return err
}
defer r.Body.Close()
return json.NewDecoder(r.Body).Decode(target)

}

В качестве альтернативы вы также можете использовать контекст для управления таймаутом запроса

func getJsonWithContext(url string, target interface{}) error {
req, err := http.NewRequest(http.MethodGet, url, nil)
if nil != err {
    return err
}
ctx, cancel := context.WithTimeout(context.Background(), time.Second*1)
defer cancel()
reqWithContext := req.WithContext(ctx)
r, err := myClient.Do(reqWithContext)
if err != nil {
    return err
}
defer r.Body.Close()
return json.NewDecoder(r.Body).Decode(target)
}

Дополнительное видео по вопросу: Как получить ответ с JWT в Golang

Go JWT Authentication Example - Golang

Securing Your Go REST APIs with JSON Web Tokens(JWTS)

Golang login handler function (JWT authentication)