#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 на предъявителя в промежуточном ПО аутентификации.