Estou tentando implementar o código a seguir, mas algo não está funcionando. Aqui está o código:
var session_url = 'http://api_address/api/session_endpoint';
var username = 'user';
var password = 'password';
var credentials = btoa(username + ':' + password);
var basicAuth = 'Basic ' + credentials;
axios.post(session_url, {
headers: { 'Authorization': + basicAuth }
}).then(function(response) {
console.log('Authenticated');
}).catch(function(error) {
console.log('Error on Authentication');
});
Ele está retornando um erro 401. Quando faço isso com o Postman, há uma opção para definir a autenticação básica; se eu não preencher esses campos também retorna 401, mas se eu preencher, a solicitação é bem-sucedida.
Alguma ideia do que estou fazendo de errado?
Aqui está parte da documentação da API sobre como implementar isso:
Este serviço usa informações de autenticação básica no cabeçalho para estabelecer uma sessão de usuário. As credenciais são validadas no servidor. Usar este serviço da web criará uma sessão com as credenciais do usuário passadas e retornará um JSESSIONID. Este JSESSIONID pode ser usado nas solicitações subsequentes para fazer chamadas de serviço da web. *
O motivo pelo qual o código em sua pergunta não autentica é porque você está enviando a autenticação no objeto de dados, não na configuração, que irá colocá-la nos cabeçalhos. De acordo com os documentos axios , o alias do método de solicitação para
post
é:Portanto, para que seu código funcione, você precisa enviar um objeto vazio para dados:
O mesmo é verdade para usar o parâmetro auth mencionado por @luschn. O código a seguir é equivalente, mas usa o parâmetro auth (e também passa um objeto de dados vazio):
fonte
Por alguns motivos, esse problema simples está bloqueando muitos desenvolvedores. Lutei por muitas horas com essa coisa simples. Este problema tem tantas dimensões:
CORS
Minha configuração para desenvolvimento é com um aplicativo vuejs webpack rodando em localhost: 8081 e um aplicativo Spring Boot rodando em localhost: 8080. Portanto, ao tentar chamar a API rest do front-end, não há como o navegador me deixar receber uma resposta do back-end do Spring sem as configurações CORS adequadas. O CORS pode ser usado para relaxar a proteção Cross Domain Script (XSS) que os navegadores modernos possuem. Pelo que entendi, os navegadores estão protegendo seu SPA de ser um ataque de um XSS. Claro, algumas respostas no StackOverflow sugeriram adicionar um plug-in chrome para desabilitar a proteção XSS, mas isso realmente funciona E se fosse, apenas empurraria o problema inevitável para mais tarde.
Configuração de back-end CORS
Veja como você deve configurar o CORS em seu aplicativo Spring Boot:
Adicione uma classe CorsFilter para adicionar cabeçalhos adequados na resposta a uma solicitação do cliente. Access-Control-Allow-Origin e Access-Control-Allow-Headers são os itens mais importantes para autenticação básica.
Adicione uma classe de configuração que estende Spring WebSecurityConfigurationAdapter. Nesta aula, você injetará seu filtro CORS:
Você não precisa colocar nada relacionado ao CORS em seu controlador.
A parte dianteira
Agora, no front-end, você precisa criar sua consulta axios com o cabeçalho Authorization:
Espero que isto ajude.
fonte
Um exemplo (axios_example.js) usando Axios em Node.js:
Certifique-se de que no diretório do seu projeto:
Você pode então testar a API REST Node.js usando seu navegador em:
http://localhost:5000/search?queryStr=xxxxxxxxx
Ref: https://github.com/axios/axios
fonte
A solução dada por luschn e pillravi funciona bem a menos que você receba um Strict-Transport-Security cabeçalho na resposta.
Adicionar withCredentials: true resolverá esse problema.
fonte