Generator för Basic Auth-headers

Ange ett användarnamn och ett lösenord för att få headern Authorization: Basic och ett curl-kommando som är klart att köra, eller klistra in en befintlig header för att se inloggningsuppgifterna i den.

Authorization-header
curl-kommando

Avkoda en befintlig header

Körs helt i din webbläsare. Inget laddas upp.

Så använder du verktyget

  1. Ange användarnamnet och lösenordet.
  2. Kopiera den genererade Authorization-headern till din klient, eller använd curl-kommandot för att testa anropet.
  3. Vill du läsa en befintlig header klistrar du in den under Avkoda en befintlig header, så visas användarnamnet och lösenordet.

Så fungerar HTTP Basic-autentisering

Basic-autentisering definieras i RFC 7617. När en resurs är skyddad svarar servern med 401 Unauthorized och headern WWW-Authenticate: Basic realm="...". Klienten sätter då ihop användarnamnet och lösenordet med ett kolon, kodar resultatet som Base64 och skickar det med varje anrop:

Authorization: Basic base64(username ":" password)

# Exempel från RFC 7617: användare "Aladdin", lösenord "open sesame"
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Webbläsare sköter det här utbytet själva och visar en inloggningsruta, medan skript och API-klienter oftast skickar headern redan med det första anropet utan att vänta på utmaningen. Eftersom kolonet skiljer de två värdena åt får användarnamnet inte innehålla något kolon, men lösenordet får det. En server kan lägga till charset="UTF-8" i sin utmaning för att tala om att inloggningsuppgifter med tecken utanför ASCII förväntas i UTF-8.

Base64 är inte kryptering

Headern ser oläslig ut, men den som ser den kan få fram lösenordet på några sekunder, med avkodaren på den här sidan eller valfri Base64-avkodare. Basic-autentisering är bara acceptabel över HTTPS, där TLS krypterar headern under överföringen. Tänk också på att:

  • inloggningsuppgifterna skickas med varje anrop, så det räcker med ett enda anrop över okrypterad HTTP för att röja dem;
  • proxyservrar, lastbalanserare och felsökningsverktyg kan logga headern Authorization om de inte uttryckligen konfigureras att låta bli;
  • webbläsare kommer ihåg angivna inloggningsuppgifter tills de stängs, och det finns inget standardiserat sätt att logga ut.

För publika API:er passar återkallbara API-tokens eller OAuth bättre. Basic-autentisering är fortfarande ett rimligt val för interna verktyg, testmiljöer och anrop mellan servrar över TLS.

Skicka headern från kod

# curl bygger headern själv
curl -u 'user:password' https://api.example.com/

// JavaScript fetch (btoa hanterar bara Latin-1-tecken)
fetch(url, { headers: { Authorization: 'Basic ' + btoa('user:password') } })

# Python requests
requests.get(url, auth=('user', 'password'))

Undvik att bädda in inloggningsuppgifter i URL:en, som i https://user:password@host/. RFC 3986 avråder från den formen, den hamnar i webbläsarhistorik och serverloggar, och moderna webbläsare begränsar den.

Vanliga frågor

Hur avkodar jag en Basic Auth-header?

Klistra in headern under Avkoda en befintlig header, så visas användarnamnet och lösenordet direkt. Vilken Base64-avkodare som helst ger samma resultat, och det är just därför som headern bara får skickas över HTTPS.

Får lösenordet innehålla ett kolon?

Ja. Servern delar det avkodade värdet vid det första kolonet, så allt som kommer efter det hör till lösenordet. Användarnamnet får däremot inte innehålla något kolon.

Är HTTP Basic-autentisering säker?

Över HTTPS och med ett starkt, unikt lösenord skyddas inloggningsuppgifterna under överföringen, men de skickas med varje anrop och kan inte gå ut som en token. Använd det aldrig över okrypterad HTTP.

Varför misslyckas inloggningen med lösenord som innehåller accenter, å, ä, ö eller icke-latinska tecken?
Klienten och servern kan vara oense om teckenkodningen. RFC 7617 låter servern ange charset="UTF-8"; utan det kan äldre servrar anta ISO-8859-1 och jämföra andra byte.
Skickas mitt lösenord någonstans?

Nej. Headern skapas av JavaScript i din webbläsare och inget överförs. Använd ändå testuppgifter när du delar ett genererat curl-kommando med andra.