Вам (вероятно) нужен способ, чтобы кто-то не мог генерировать свои собственные токены.Если у вашего токена есть дата истечения срока действия и адрес электронной почты в открытом виде в токене, то они могут быть восстановлены без особых усилий, поэтому единственной надежной информацией является случайное число.Но для того, чтобы случайное число было полезным (с точки зрения безопасности), вашему серверу необходимо запомнить случайное число.Но если вы собираетесь это сделать, другая информация является избыточной.
Поэтому я предлагаю просто использовать случайное число в качестве токена.И хороший способ сгенерировать случайное число с подходящей «текстовой броней» - сгенерировать UUID типа 4;см. Javadoc класса UUID
для деталей.Остальная информация (срок действия, адрес электронной почты и уникальный ключ для регистрационной информации пользователя) может храниться в таблице базы данных и не отправляться пользователю.