Другой ответ, связанный с Mark M. , содержит выдержку из спецификации JWT, которая описывает требования к заявке jti .По сути, он работает как идентификатор, поэтому он должен быть уникальным в любой области его использования.Что это означает, зависит от приложения.
Не важно, чтобы это утверждение было трудно угадать, поскольку каждый раз, когда вы создаете новое, вы подаете в отставку и восстанавливаете весь токен.Таким образом, вы могли бы даже использовать простой счетчик, при условии, что вы можете гарантировать, что один и тот же счетчик никогда не будет использоваться дважды на разных токенах, даже случайно.
В большинстве случаев какое-то уже установленное решение для генерации (полу-)случайные уникальные идентификаторы, вероятно, будут вашим лучшим выбором.Некоторые предложения:
- Чтобы быть уверенным, что вы можете использовать UUID.Для них существует популярный пакет npm .
- Реализация этого пакета, по-видимому, основана на нативном
crypto.randomBytes()
Node, который сам по себе является опцией. - Если выиспользуйте Mongo, возможно, будет работать ObjectId Mongo.
- Использование
Math.random()
(и, возможно, даты), как это делал ваш коллега, также может быть вариантом. - Как уже упоминалось, счетчик может работатьв некоторых сценариях.
Каждый из них обеспечивает разную степень случайности / уникальности, при этом загружая ЦП по-разному и получая идентификаторы разных размеров / длин.Вы сами решаете, какое решение является наиболее подходящим.Для моего варианта использования я выберу randomBytes
, так как считаю его достаточным для своих нужд:
Насколько случайным является crypto # randomBytes?
шансы криптографически безопасного генератора случайных чисел, генерирующего тот же uuid, достаточно маленький, чтобы вам не нужно было проверять уникальность?
Это может быть дорого с точки зрения производительности, но мне не нужно слишком многобайтов и имеет неблокирующий режим, который использует пул потоков libuv.