Несоответствующие типы, вызывающие ошибку при создании токена JWT - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь сгенерировать токен JWT, но у меня возникают проблемы при преобразовании всего в байтовый массив.

func GenerateToken(uid, cid int64) string{
    header := `{"alg": "HS256","typ": "JWT"}`
    header = base64.URLEncoding.EncodeToString([]byte(header))
    var b structs.JwtBody
    b.UID = uid
    b.CID = cid
    body, _ := json.Marshal(b)
    key := []byte(secret)
    h := hmac.New(sha256.New, key)
    h.Write([]byte(header + "." + body))
    signature := base64.URLEncoding.EncodeToString(h.Sum(nil))
    jwt := header + "." + body + "." + signature
    return jwt
}

Я получаю сообщение об ошибке с этой строкой, потому что типы не совпадают.

h.Write([]byte(header + "." + body))

Как мне это исправить?

1 Ответ

2 голосов
/ 03 апреля 2019

Измените строку h.Write на следующую:

h.Write([]byte(header))
h.Write([]byte("."))
h.Write(body)

Разделение вычисления хеша на три отдельных вызова должно быть (немного) быстрее, чем объединение частей и запись этого.

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