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!
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!
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);
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!