Метод подписания JWT HS256 Golang - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть вопрос о подписи JWT методом HS256 в Go. Я использую этот импорт "github.com/dgrijalva/jwt-go"

Для него не требуется длина секретного ключа> = 256 бит (32 байта)?

Давайте скажем, у меня есть серверное приложение, написанное на Golang, которое дает JWT, подписанный с секретным ключом длиной 16 бит. Когда я пытаюсь проверить этот JWT в клиентском приложении (которое написано в Java) с тем же секретным ключом, он выдает мне ошибку:

io.jsonwebtoken.security.WeakKeyException: The specified key byte array is 16 bits which is not secure enough for any JWT HMAC-SHA algorithm.

Ну, эта ошибка Имеет смысл, поскольку длина секретного ключа меньше 256 бит, но как серверному приложению удалось сгенерировать JWT, подписанный секретным ключом размером менее 256 бит, без сообщения об ошибке?

Здесь это функция, которая создает токен доступа:

import(
    "time"

    "github.com/dgrijalva/jwt-go"
)

func CreateToken(userid uint64) (string, error) {
    var err error
    //Creating Access Token
    atClaims := jwt.MapClaims{}
    atClaims["authorized"] = true
    atClaims["user_id"] = userid
    atClaims["exp"] = time.Now().Add(time.Minute * 15).Unix()
    at := jwt.NewWithClaims(jwt.SigningMethodHS256, atClaims)
    token, err := at.SignedString([]byte("NRF"))
    if err != nil {
        return "", err
    }
    return token, nil
}

1 Ответ

0 голосов
/ 25 апреля 2020

В Go нет "стандартной" библиотеки jwt. Поэтому, чтобы полностью ответить на этот вопрос, нам нужно увидеть код сервера или библиотеку, которую использует сервер.

Пакеты crypto/hmac и crypto/hash не определяйте ошибки, которые будут возвращены в любом случае. Поэтому проверка длины ключа, как вы описали, должна выполняться вызывающей стороной. Так что дело не в языке go что-то делает. Вопрос в том, как написана программа.

Если вы хотите узнать больше, вы можете просмотреть различные реализации на https://jwt.io/#libraries -io . (Фильтровать вручную по Go).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...