Читая ваш вопрос, я безуспешно пытался найти в Интернете способ шифрования или подписи токенов на предъявителя. Я полагаю, что токены на предъявителя не хэшируются (возможно, частично, но не полностью), потому что в этом случае невозможно будет расшифровать его и извлечь из него свойства пользователя.
Но ваш вопрос, кажется, пытается найти ответы о функциональности токена Bearer:
Предположим, я реализую провайдер авторизации. Могу ли я предоставить какую-либо строку для токена на предъявителя? Это может быть случайная строка? Должна ли быть кодировка base64 некоторых атрибутов? Должен ли он быть хеширован?
Итак, я попытаюсь объяснить, как работают токены Bearer и Refresh:
Когда пользователь запрашивает на сервере токен, отправляющий пользователя и пароль через SSL, сервер возвращает две вещи: токен доступа и токен обновления. .
Токен доступа - это токен на предъявителя, который необходимо добавить во все заголовки запроса для аутентификации в качестве конкретного пользователя.
Authorization: Bearer <access_token>
Токен доступа - это зашифрованная строка со всеми желаемыми свойствами пользователя, утверждениями и ролями. (Вы можете проверить, увеличивается ли размер токена, если вы добавите больше ролей или утверждений). Как только сервер ресурсов получит токен доступа, он сможет расшифровать его и прочитать эти пользовательские свойства. Таким образом, пользователь будет проверен и предоставлен вместе со всем приложением.
Токены доступа имеют короткий срок действия (т. Е. 30 минут). Если бы у маркеров доступа был большой срок действия, это было бы проблемой, потому что теоретически нет возможности отозвать его. Итак, представьте пользователя с ролью «Администратор», которая меняется на «Пользователь». Если пользователь хранит старый токен с role = "Admin", он сможет получить доступ до истечения срока действия токена с правами администратора. Вот почему токены доступа имеют короткий срок действия.
Но возникает одна проблема. Если токен доступа имеет короткий срок действия, мы должны отправлять каждые короткие периоды имя пользователя и пароль. Это безопасно? Нет, это не так. Мы должны избегать этого. Вот когда появляются жетоны обновления, чтобы решить эту проблему.
Токены обновления хранятся в БД и имеют длительный срок действия (например, 1 месяц).
Пользователь может получить новый токен доступа (когда он истекает, например, каждые 30 минут), используя токен обновления, который пользователь получил в первом запросе токена. Когда срок действия маркера доступа истекает, клиент должен отправить токен обновления. Если этот токен обновления существует в БД, сервер вернет клиенту новый токен доступа и другой токен обновления (и заменит старый токен обновления новым).
Если маркер доступа пользователя был скомпрометирован, токен обновления этого пользователя должен быть удален из БД. Таким образом, токен будет действителен только до истечения срока действия токена доступа, потому что, когда хакер пытается получить новый токен доступа, отправляющий токен обновления, это действие будет отклонено.