у меня есть следующая полезная нагрузка JWT: {"exp": 4724377561}
(некоторая дата через 100 лет)
Кодирование в Go дает ewogICAiZXhwIjogNDcyNDM3NzU2MQp9
Использование jwt.io однако оно закодировано вeyJleHAiOjQ3MjQzNzc1NjF9
, который дает другую подпись при подписании.Я использую подписи jwt.io в тестовых приборах.
Я бы не хотел использовать сторонние инструменты JWT, чтобы сохранить свои зависимости тонкими.Я подозреваю, что проблема заключается в какой-то кодировке символов.
Чтобы обеспечить удобочитаемость тестов, я использую текстовый JSON в приборах.
Я использую свои тестовые приборы:следующее (исключая другие контрольные примеры):
import (
"encoding/base64"
"reflect"
"testing"
)
var testData = []struct {
name string
header string
payload string
signature string
pass bool
errorType reflect.Type
}{{
name: "Succeed if token not expired",
header: `{"typ":"JWT","alg":"HS256"}`,
payload: `{"exp": 4724377561}`,
signature: "JHtMKvPSMa5BD22BsbxiP1-ELRh1XkIKkarRSev0ZjU",
pass: true,
}}
func TestParseJwt(t *testing.T) {
HmacSecret = []byte("My super secret key")
for _, tst := range testData {
jwt64 :=
base64.RawURLEncoding.EncodeToString([]byte(tst.header)) + "." +
base64.RawURLEncoding.EncodeToString([]byte(tst.payload)) + "." +
tst.signature
_, err := ParseJwt(jwt64)
if tst.pass {
if err != nil {
t.Fatal(tst.name, err)
}
} else {
// If an error was expected to be thrown, assert that it is the correct one.
if reflect.TypeOf(err).String() != tst.errorType.String() {
t.Fatal(tst.name, err)
}
}
}
}