Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Disponibilização do token via Headers

Durante o curso, a devolução do token para o client é via o body do auth. Teria como realizar a devolução direto no headers? mais precisamente dentro de x-acess-token no header?

Obrigado!

6 respostas

Bom dia!

Sim, é possível retornar como um header, invés de um body.

Para isso, basta setar o valor do token, através do request:

request.setHeader(attributeName, attributeValue);

Porém, as APIs precisam receber este valor como header de autorização, e ai seu front precisará de muita manipulação para conseguir recuperar todas as vezes o conteúdo do header, quando poderiamos muito bem guardar o conteudo do body no sessionStorage do browser, e na sequencia só fazer uso desta referência, o que facilita a construção e manutenção.

Espero ter ajudado. Se sua dúvida foi sanada, marque este tópico como solucionado.

Bons estudos!

Obrigado pelo auxilio Thiago. Entretanto, me surgiu uma outra questão, no curso de angular é consumido uma API e nessa API o parâmetro do header de authorization é passado dentro de x-access-token, invés do body, por isso minha duvida. Qual seria a melhor forma de realizar esse input do Header?

Bom dia!

Precisamos separar aqui a requisição de um token, e a requisição de dados de uma API.

A resposta de uma API, quando se espera algum valor de retorno, o padrão é que você retorne via "body" o conteudo. Independente do tipo, sejam dados, seja um token. Então, a resposta de uma API de token, deveria retornar o conteúdo via body.

Quando se faz uma chamada de API que irá retornar um dado um dado qualquer, e precisa de autorização, aí sim você injeta o header de authorization, e o nome do header pode ser qualquer nome, pois quem especifica isso é a API. E nesse caso, pode ser dentro de x-access-token, ou como Bearer, etc.

Obrigado novamente Thiago!

Entendi... então na pratica o fluxo deveria ser para vir como headers:

Client faz o post para API para o auth, o lado Server faz a devolução caso sucesso com o token via Headers, o client armazena esse header em memoria, cache, cookie, seja la oq for.

Certo? Então nesse cenário, devo usar a sua solução com o request.setHeader(attributeName, attributeValue);

solução!

O fluxo seria padrão seria:

1 - Client faz o post para API para o auth, o lado Server faz a devolução caso sucesso com o token via body. 2 - O client armazena o conteúdo desse body no sessionStorage do browser. 3 - lient faz o post para API de dados, injentado o header de autorização, recuperando o valor do sessionStorage do browser.

Esse seria o fluxo padrão. Quando uma API precisa retornar algum dado, o padrão é devolver HTTP200, com o conteúdo via body.

Sua solução não está errada, também é uma solução válida. Para este nosso caso de estudo vai funcionar.

Perfeito Thiago, segui o modelo apresentado, ainda vou fazer melhorias.

Mas de antemão, o código ficou mais ou menos assim

Authentication authentication = authManager.authenticate(dadosLogin);
            String token = service.gerarToken(authentication);
            HttpHeaders headers = new HttpHeaders();
            headers.add("x-access-token", token);
            return new ResponseEntity<TokenDTO>(new TokenDTO(token,"Bearer"),headers,HttpStatus.OK);

Onde eu retorno das duas formas o token, tanto como body, quanto header.

Obrigado!