Я использую пакет "github.com/dgrijalva/jwt-go" в golang для аутентификации хитов API.
Код для создания токена jwt:
token := jwt.NewWithClaims(jwt.SigningMethodHS256, &jwt.MapClaims{
"email": "test@example.com",
"exp": time.Now().Add(time.Hour * 8760).Unix(),
"role": "customer",
"name": "John Doe",
"ip": 0.0.0.0,
"user_agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0"
"id": 1,
})
tokenString, err := token.SignedString([]byte(config.SignKey))
Вот шаги для использования этого токена:
- Первые хиты API входа в систему, и мы вызываем вышеуказанный метод для генерации токена и возврата этого токена в ответ API.
После этого еще одинAPI-хиты, содержащие этот токен в заголовках со строкой "Bearer".Мы декодируем этот токен и аутентифицируем его с помощью следующего кода:
bearer := strings.Split(c.Request.Header["Authorization"][0], "Bearer")
bearerToken := strings.TrimSpace(bearer[1])
token, err := jwt.Parse(bearerToken, func(token *jwt.Token) (interface{}, error) {return config.SignKey, nil})
if err != nil {
c.JSON(200, gin.H{"response": "{error: "err", msg: Session Expired. Please log out and back in to continue2.}",})
c.Abort()
return
}
Теперь предположим, что токен был декодирован для URL: http://SOMEDOMAIN.COM/api/v1/SOMEAPI
из этого API я выпустил другойКоманда curl в формате:
"curl --header 'Ip: " + ip + "' --header 'User-Agent: " + userAgent + "' --header 'Authorization: " + token + "' 'http://SOMEDOMAIN.COM/api/v2/ANOTHERAPI'"
Эта команда использует другой API, но использует те же учетные данные, что и токен, аналогично тому, который был создан из API входа.
Оба API-адреса с разными URL-адресами размещаютсяна том же сервере, но в другой папке проекта golang.
Теперь этот пакет не аутентифицирует токен и выдает следующую ошибку:
{"response":{"code":400,"api_status":10,"message":"Session Expired. Please log out and back in to continue2.","data":{"Inner":{},"Errors":4}}}
Я искал значение кода ошибки 4 вэтот случай.
Может кто-нибудь объяснить, что означает Error: 4
и почему он ведет себя так на разных URL-адресах?