Protegendo o Serviço da Web REST usando token (Java)

Esta questão está de alguma forma relacionada à questão vinculada abaixo. No entanto, preciso de um pouco mais de clareza sobre alguns aspectos e algumas informações adicionais. Referir:Implementação do token de autenticação do serviço web REST

Fundo:

Preciso implementar segurança para um serviço da Web REST usando tokenO serviço da web é destinado ao uso com o cliente Java. Portanto, autenticação de formulário e pop-ups para credenciais não são úteis.Eu sou novo na segurança e criptografia REST

Isto é o que eu entendi até agora:

Para o primeiro pedido:

O usuário estabelece conexão https (ou o contêiner garante https usando 301)Nome de usuário e senha do usuário POSTs para o serviço de loginSe credenciais são válidas, nós:Gere um token temporário aleatórioArmazene o token aleatório no servidor, mapeando-o para o nome de usuário realCriptografar o token usando uma chave simétrica conhecida apenas pelo servidorHash do token criptografadoEnvie o token criptografado e o hash para o cliente

Para solicitações subsequentes:

O cliente envia essa combinação criptografada de token e hash (usando o campo de nome de usuário básico?)Garantimos que o token criptografado não seja violado usando o hash e, em seguida, descriptografamosVerificamos o token descriptografado na tabela de rastreamento de sessão para obter uma entrada não expirada e obtemos o nome de usuário real (a validade é gerenciada pelo código?)Se o nome de usuário for encontrado, com base nas funções permitidas, as operações permitidas serão configuradas

Mais detalhes:

Como o cliente é um cliente java, a primeira solicitação pode ser um POST contendo as credenciais. No entanto, isso pode expor as credenciais antes que o https seja estabelecido. Portanto, deve haver um GET fictício para um recurso protegido, para que o https seja estabelecido primeiro?Supondo que seja necessário, a segunda solicitação é um LoginAction POST com credenciais. Essa solicitação é tratada manualmente (sem usar a autorização do contêiner). Isto está certo?O LoginAction acima retorna ao usuário a combinação de token criptografado + hashO usuário define o cabeçalho que é usado pelo mecanismo de autenticação BASIC (nome de usuário do campo)Implementamos um JAASRealm para descriptografar e validar o token e encontrar as funções permitidasO restante do processo de autorização é tratado pelo contêiner com o WebResourceCollection definido no web.xml

Essa é a abordagem correta?

questionAnswers(2)

yourAnswerToTheQuestion