JSONWebToken
JSONWebToken - это библиотека для создания (подписания) и подтверждения (проверки) токенов, используемых для аутентификации/авторизации пользователей. Данная библиотека является реализацией JSON Web Tokens для
Node.js
.
Установка
yarn add jsonwebtoken
# или
npm i jsonwebtoken
Подписание (создание) токена
const jwt = require('jsonwebtoken')
jwt.sign(payload, secretOrPrivateKey, [options, callback])
// Пример
jwt.sign({
username: 'John',
email: 'john@email.com'
},
'secret',
{
expiresIn: '1h'
}
)
Если передан колбек, то метод выполняется асинхронно. Данный колбек получает объект ошибки err
. В противном случае, метод выполняется синхронно, возвращая токен в виде строки.
Аргументы
payload
- полезная нагрузка: объект, буфер или строка, представляющие валидный JSON. Объект преобразуется с помощью методаJSON.stringify()
secretOrPrivateKey
- строка, буфер или объект, содержащие секрет для алгоритмов HMAC или зашифрованный с помощью схемы PEM приватный ключ для RSA и ECDSA
Настройки
-
algorithm
(по умолчаниюHS256
) -
expiresIn
- время, в течение которого токен считается действительным: 100 - 100 с, '100' - 100 мс, '1h' - 1 час, '2d' - 2 дня -
notBefore
- время, по истечении которого токен будет считаться действительным -
audience
-
issuer
-
jwtid
-
subject
-
noTimestamp
-
header
-
keyid
-
mutatePayload
- если имеет значениеtrue
, функцияsign()
будет модифицировать объектpayload
напрямую. Это бывает полезным, когда нам нужна "сырая" ссылка на полезную нагрузку после применения к ней настроек, но до шифрования.
Настройки expiresIn
, notBefore
, audience
, subject
, issuer
могут быть определены прямо в payload
как exp
, nbf
, aud
, sub
и iss
, соответственно.
Заголовок может быть кастомизирован через объект options.header
.
В сгенерированный jwt
по умолчанию включается iat
(время выпуска, создания), если не определено noTimestamp: true
.
Пример синхронного подписания токена с использованием RSA SHA256
const privateKey = fs.readFileSync('private.key')
const token = jwt.sign({ name: 'John Smith' }, privateKey, { algorithm: 'RS256' })