Как извлечь JWT из заголовка авторизации

#http #go #jwt

#http #Вперед #jwt

Вопрос:

У меня есть запрос curl как таковой:

curl -XPOST -H 'Content-Type: application/json' -H 'Authorization: sso-jwt JWT_STRING' http://localhost:50051/doSomething -d '{"note": "Here's a note"}'

Я использую echo.Контекст для анализа этого запроса. Мне требуется извлечь общее имя (CN) из JWT_STRING . Вот как далеко я продвинулся:

 tokenString, err := request.HeaderExtractor{"Authorization"}.ExtractToken(c.Request())
    if err == nil {
        fmt.Println(tokenString)
    } else {
        fmt.Println(err)
    }
  

Приведенные выше распечатки:

sso-jwt JWT_STRING в то время как я хочу JWT_STRING .

Есть ли способ добиться этого лучшим способом? (Помимо использования манипуляций со строками только для извлечения JWT_STRING ).

Этот код находится внутри моего обработчика func, который имеет следующую подпись: func (lock *Lock) DoSomething(c echo.Context) error {}

Редактировать

Для меня работает следующее:

 reqToken := c.Request().Header.Get("Authorization")
splitToken := strings.Split(reqToken, "sso-jwt ")
reqToken = splitToken[1]
fmt.Println(reqToken)
  

Однако, это лучший способ добиться этого?

Ответ №1:

Самый простой способ добиться этого — использовать strings.TrimPrefix функцию следующим образом:

 token := strings.TrimPrefix(c.Request().Header.Get("Authorization"), "sso-jwt ")
  

Это нормально и обычно является частью процесса, который я использую для получения JWT на предъявителя в промежуточном ПО аутентификации.