Jak używać
- Wpisz nazwę użytkownika i hasło w polach „Nazwa użytkownika” i „Hasło”.
- Skopiuj wygenerowany nagłówek Authorization do klienta HTTP albo użyj polecenia curl, aby przetestować żądanie.
- Aby odczytać istniejący nagłówek, wklej go w sekcji „Dekoduj istniejący nagłówek”, a pojawią się nazwa użytkownika i hasło.
Jak działa uwierzytelnianie HTTP Basic
Uwierzytelnianie Basic jest zdefiniowane w RFC 7617. Gdy zasób jest chroniony, serwer odpowiada kodem 401 Unauthorized i nagłówkiem WWW-Authenticate: Basic realm="...". Klient łączy wtedy nazwę użytkownika i hasło dwukropkiem, koduje wynik w Base64 i wysyła go z każdym żądaniem:
Authorization: Basic base64(username ":" password)
# Przykład z RFC 7617: użytkownik "Aladdin", hasło "open sesame"
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Przeglądarki obsługują tę wymianę samodzielnie i wyświetlają okno logowania, natomiast skrypty i klienty API zwykle wysyłają nagłówek już z pierwszym żądaniem, nie czekając na wyzwanie (challenge) serwera. Ponieważ dwukropek oddziela obie wartości, nazwa użytkownika nie może go zawierać, a hasło może. Serwer może dodać do wyzwania parametr charset="UTF-8", aby zasygnalizować, że dane logowania ze znakami spoza ASCII powinny być zakodowane w UTF-8.
Base64 to nie szyfrowanie
Nagłówek wygląda na zaszyfrowany, ale każdy, kto go zobaczy, odzyska hasło w kilka sekund za pomocą dekodera na tej stronie lub dowolnego dekodera Base64. Uwierzytelnianie Basic jest dopuszczalne tylko przez HTTPS, gdzie TLS szyfruje nagłówek podczas przesyłania. Warto też pamiętać, że:
- dane logowania są przesyłane z każdym żądaniem, więc wystarczy jedno żądanie przez zwykłe HTTP, aby je ujawnić;
- serwery proxy, load balancery i narzędzia do debugowania mogą zapisywać nagłówek
Authorizationw logach, jeśli nie zostaną odpowiednio skonfigurowane; - przeglądarki pamiętają wprowadzone dane logowania aż do zamknięcia, a standardowy sposób wylogowania nie istnieje.
W publicznych API lepiej sprawdzają się tokeny API, które można unieważnić, lub OAuth. Uwierzytelnianie Basic pozostaje rozsądnym wyborem dla narzędzi wewnętrznych, środowisk testowych (staging) i komunikacji między serwerami przez TLS.
Wysyłanie nagłówka z poziomu kodu
# curl sam tworzy nagłówek
curl -u 'user:password' https://api.example.com/
// JavaScript fetch (btoa obsługuje tylko znaki Latin-1)
fetch(url, { headers: { Authorization: 'Basic ' + btoa('user:password') } })
# Python requests
requests.get(url, auth=('user', 'password'))
Unikaj umieszczania danych logowania w adresie URL, np. https://user:password@host/. RFC 3986 uznaje tę formę za przestarzałą, trafia ona do historii przeglądarki i logów serwera, a nowoczesne przeglądarki ograniczają jej obsługę.
Najczęściej zadawane pytania
Jak zdekodować nagłówek Basic Auth?
Wklej nagłówek w sekcji „Dekoduj istniejący nagłówek”, a nazwa użytkownika i hasło pojawią się od razu. Każdy dekoder Base64 da ten sam wynik i właśnie dlatego nagłówek wolno przesyłać wyłącznie przez HTTPS.
Czy hasło może zawierać dwukropek?
Tak. Serwer dzieli zdekodowaną wartość przy pierwszym dwukropku, więc wszystko, co znajduje się za nim, należy do hasła. Nazwa użytkownika nie może jednak zawierać dwukropka.
Czy uwierzytelnianie HTTP Basic jest bezpieczne?
Przez HTTPS i z silnym, unikatowym hasłem chroni dane logowania podczas przesyłania, ale są one wysyłane z każdym żądaniem i nie mogą wygasnąć tak jak token. Nigdy nie używaj go przez zwykłe HTTP.
Dlaczego logowanie nie działa, gdy hasło zawiera polskie znaki lub inne znaki spoza alfabetu łacińskiego?
charset="UTF-8"; bez tego starsze serwery mogą zakładać ISO-8859-1 i porównywać inne bajty.Czy hasło jest gdzieś wysyłane?
Nie. Nagłówek jest tworzony przez JavaScript w przeglądarce i nic nie jest przesyłane. Mimo to używaj testowych danych logowania, gdy udostępniasz innym wygenerowane polecenie curl.