Ao ler sua pergunta, tentei, sem sucesso, pesquisar na Internet como os tokens do Bearer são criptografados ou assinados. Eu acho que os tokens do portador não são hash (talvez parcialmente, mas não completamente) porque, nesse caso, não será possível descriptografá-lo e recuperar as propriedades dos usuários.
Mas sua pergunta parece estar tentando encontrar respostas na funcionalidade do token do Bearer:
Suponha que eu esteja implementando um provedor de autorização, posso fornecer qualquer tipo de string para o token do portador? Pode ser uma string aleatória? Tem que ser uma codificação base64 de alguns atributos? Deve ser hash?
Então, tentarei explicar como os tokens do portador e os tokens de atualização funcionam:
Quando o usuário solicita ao servidor um token enviando usuário e senha por SSL, o servidor retorna duas coisas: um token de acesso e um token de atualização .
Um token de acesso é um token de portador que você precisará adicionar em todos os cabeçalhos de solicitação para ser autenticado como um usuário concreto.
Authorization: Bearer <access_token>
Um token de acesso é uma sequência criptografada com todas as propriedades, reivindicações e funções do usuário que você deseja. (Você pode verificar se o tamanho de um token aumenta se adicionar mais funções ou reivindicações). Depois que o servidor de recursos receber um token de acesso, poderá descriptografá-lo e ler essas propriedades do usuário. Dessa forma, o usuário será validado e concedido juntamente com todo o aplicativo.
Os tokens de acesso têm uma validade curta (ou seja, 30 minutos). Se os tokens de acesso tivessem uma expiração longa, isso seria um problema, porque teoricamente não há possibilidade de revogá-lo. Imagine um usuário com uma função = "Admin" que muda para "Usuário". Se um usuário mantiver o token antigo com role = "Admin", ele poderá acessar até o vencimento do token com direitos de administrador. É por isso que os tokens de acesso têm uma validade curta.
Mas, uma questão vem à mente. Se um token de acesso tiver vencimento curto, precisamos enviar a cada curto período o usuário e a senha. Isso é seguro? Não é não. Nós devemos evitá-lo. É quando os tokens de atualização aparecem para resolver esse problema.
Os tokens de atualização são armazenados no banco de dados e terão uma validade longa (exemplo: 1 mês).
Um usuário pode obter um novo token do Access (quando ele expira, a cada 30 minutos, por exemplo) usando um token de atualização que o usuário recebeu na primeira solicitação de um token. Quando um token de acesso expira, o cliente deve enviar um token de atualização. Se esse token de atualização existir no DB, o servidor retornará ao cliente um novo token de acesso e outro token de atualização (e substituirá o antigo token de atualização pelo novo).
Caso um token de acesso do usuário tenha sido comprometido, o token de atualização desse usuário deverá ser excluído do DB. Dessa forma, o token será válido apenas até que o token de acesso expire, porque quando o hacker tentar obter um novo token de acesso enviando o token de atualização, essa ação será negada.