Ошибка 4 JWT-GO и проверка токена с другого URL-адреса API - PullRequest
0 голосов
/ 26 сентября 2019

Я использую пакет "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))

Вот шаги для использования этого токена:

  1. Первые хиты API входа в систему, и мы вызываем вышеуказанный метод для генерации токена и возврата этого токена в ответ API.
  2. После этого еще один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-адресах?

1 Ответ

0 голосов
/ 26 сентября 2019

Когда я исследовал ваш код,

В вашем config.SignKey есть неправильное использование. Кажется, он читал []byte во время подписи токена.

Но при разборе вашего токена;

{return config.SignKey, nil}

Вы использовали тип по умолчанию и не разыграли []byte.

 {return []byte(config.SignKey), nil}

Я думаю, что это проблема.

...