JWT поддерживает множество алгоритмов подписи, и это проблема для этого конкретного API: в зависимости от алгоритма подписи он ожидает увидеть ключ, соответствующий этому алгоритму.
Если вы посмотрите на документы API для этой конкретной библиотеки:
https://godoc.org/github.com/dgrijalva/jwt-go
Вы увидите SigningMethodXXX
типов. Это подписывающие лица, выбранные выбранным вами методом подписания. Для ES256 используется SigningMethodECDSA
:
https://godoc.org/github.com/dgrijalva/jwt-go#SigningMethodECDSA
Если вы посмотрите на документацию по методу Sign
, вы увидите, что там написано:
Для этого метода подписи ключ должен быть структурой ecdsa.PrivateKey.
который вы можете проанализировать из файла PEM, используя:
https://godoc.org/github.com/dgrijalva/jwt-go#ParseECPrivateKeyFromPEM
Например:
pk, err:= jwt.ParseECPrivateKeyFromPEM(pemData)
tokenStr, err := token.SignedString(pk)
Это должно дать вам подписанный токен с ES256.
Итак, вы должны сначала выяснить, какой у вас ключ. Если у вас есть PEM-кодирование ключа ECDSA в строке, используйте этот метод для его синтаксического анализа и передачи полученного закрытого ключа подписывающей стороне.
Однако если у вас просто есть строковый секретный ключ (например, пароль) и вы поделитесь этим секретным ключом с пользователями JWT, вы можете использовать ключ HMAC. Ключ HMAC — это просто секрет массива байтов, которым вы делитесь со своими пользователями, чтобы они могли подтвердить, что JWT был подписан вами. Просто измените SigningMethod на одну из констант в:
https://godoc.org/github.com/dgrijalva/jwt-go#SigningMethodHMAC
Тогда ваш код будет работать как есть, за исключением того, что вам нужно изменить метод подписи на что-то вроде jwt.New(jwt.SigningMethodHS256)
person
Burak Serdar
schedule
28.01.2020
ecdsa.PrivateKey
. - person Burak Serdar   schedule 27.01.2020