Próbuję zaimplementować następujący kod, ale coś nie działa. Oto kod:
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');
});
Zwraca błąd 401. Kiedy robię to z Postmanem, jest opcja ustawienia podstawowego uwierzytelniania; jeśli nie wypełnię tych pól, zwraca również 401, ale jeśli to zrobię, żądanie się powiedzie.
Jakieś pomysły, co robię źle?
Oto część dokumentacji API, jak to zaimplementować:
Ta usługa używa informacji o podstawowym uwierzytelnieniu w nagłówku do ustanowienia sesji użytkownika. Poświadczenia są sprawdzane na serwerze. Użycie tej usługi internetowej utworzy sesję z przekazanymi poświadczeniami użytkownika i zwróci JSESSIONID. Ten identyfikator JSESSIONID może być używany w kolejnych żądaniach wywołań usług internetowych. *
Powodem, dla którego kod w twoim pytaniu nie jest uwierzytelniany, jest to, że wysyłasz autoryzację w obiekcie danych, a nie w konfiguracji, która umieści ją w nagłówkach. Za tych docs Axios The prośba metoda alias na
post
to:Dlatego, aby Twój kod działał, musisz wysłać pusty obiekt na dane:
To samo dotyczy używania parametru auth wspomnianego przez @luschn. Poniższy kod jest równoważny, ale zamiast tego używa parametru auth (a także przekazuje pusty obiekt danych):
źródło
Z pewnych powodów ten prosty problem blokuje wielu programistów. Przez wiele godzin walczyłem z tą prostą rzeczą. Ten problem w wielu wymiarach:
CORS
Moja konfiguracja do programowania obejmuje aplikację vuejs webpack działającą na hoście lokalnym: 8081 i aplikację rozruchową wiosną działającą na hoście lokalnym: 8080. Więc kiedy próbuję wywołać rest API z frontendu, nie ma możliwości, żeby przeglądarka pozwoliła mi otrzymać odpowiedź z backendu sprężynowego bez odpowiednich ustawień CORS. CORS może służyć do złagodzenia ochrony skryptów międzydomenowych (XSS), które mają nowoczesne przeglądarki. Jak rozumiem, przeglądarki chronią Twoje SPA przed atakiem XSS. Oczywiście niektóre odpowiedzi na StackOverflow sugerowały dodanie wtyczki Chrome w celu wyłączenia ochrony XSS, ale to naprawdę działa, a gdyby tak było, tylko popchnęłoby nieunikniony problem na później.
Konfiguracja CORS zaplecza
Oto, jak należy skonfigurować CORS w aplikacji do rozruchu wiosennego:
Dodaj klasę CorsFilter, aby dodać odpowiednie nagłówki w odpowiedzi na żądanie klienta. Access-Control-Allow-Origin i Access-Control-Allow-Headers to najważniejsze elementy podstawowego uwierzytelniania.
Dodaj klasę konfiguracji, która rozszerza Spring WebSecurityConfigurationAdapter. W tej klasie wstrzykniesz swój filtr CORS:
Nie musisz umieszczać niczego związanego z CORS w swoim kontrolerze.
Frontend
Teraz w interfejsie musisz utworzyć zapytanie Axios z nagłówkiem Authorization:
Mam nadzieję że to pomoże.
źródło
Przykład (axios_example.js) przy użyciu Axios w Node.js:
Upewnij się, że w katalogu projektu robisz:
Następnie możesz przetestować interfejs REST API Node.js za pomocą przeglądarki pod adresem:
http://localhost:5000/search?queryStr=xxxxxxxxx
Ref: https://github.com/axios/axios
źródło
Rozwiązanie podane przez luschn i pillravi działa dobrze, chyba że w odpowiedzi otrzymasz nagłówek Strict-Transport-Security .
Dodanie withCredentials: true rozwiąże ten problem.
źródło