Код Middle Безопасность бэкенда спрашивают часто обновлено

Проверка claims JWT после подписи

Условие

Подпись токена уже проверена библиотекой. Напиши checkClaims(payload, { now, issuer, audience, leewaySec = 0 }), now в секундах Unix. Верни 'ok' или код первой найденной проблемы в таком порядке проверок:

  1. 'iss': payload.iss !== issuer;
  2. 'aud': payload.aud (строка или массив строк) не содержит audience;
  3. 'exp': нет exp или now >= exp + leewaySec (токен истёк);
  4. 'nbf': есть nbf и now < nbf - leewaySec (ещё не действует);
  5. 'iat': есть iat и он из будущего: iat > now + leewaySec.

Примеры

checkClaims({"iss":"auth","aud":"api","exp":2000,"iat":1000}, {"now":1500,"issuer":"auth","audience":"api"}) // "ok"
checkClaims({"iss":"evil","aud":"api","exp":2000}, {"now":1500,"issuer":"auth","audience":"api"}) // "iss"
checkClaims({"iss":"auth","aud":["web","api"],"exp":2000}, {"now":1500,"issuer":"auth","audience":"api"}) // "ok"

Как подойти

Подсказки: 2
  1. Приведи aud к массиву.
  2. Отсутствующий exp считай ошибкой: бессрочный токен нельзя отозвать.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.

Термины по теме