HTTP hitelesítés

A HTTP-hitelesítés vagy a HTTP-hitelesítés (amelyet az RFC  2617 határoz meg ) lehetővé teszi a kiszolgáló számára a HTTP azonosítását, amely megmutatja neki, hogy ismerünk felhasználói nevet és jelszót korlátozott hozzáférésű erőforrásokhoz való hozzáférés érdekében.

Általános működés

Amikor egy HTTP kliens védett erőforrást kér a szervertől, az utóbbi a kéréstől függően különböző módon válaszol:

Mód

Az RFC  2617 specifikáció két módszert határoz meg :

"Alapvető" módszer

Ez a módszer a legegyszerűbb, ugyanakkor a legkevésbé biztonságos, mert továbbítja a 64 bázisban kódolt jelszót, amelyet könnyen dekódolhatunk. Csak titkosított kapcsolattal ( HTTPS protokoll ) ajánlott .

A kiszolgáló, amely nem kap megfelelő azonosító fejlécet, a következő HTTP fejlécet küldi:

WWW-Authenticate: Basic realm="WallyWorld"

A szerver jelzi a szükséges módszert (Basic), majd a paramétereket. Az "Alap" módszerhez csak a "tartomány" paraméterre van szükség, amely azonosítja a védelmi tartományt.

Ezután a HTTP kliens a HTTP „Engedélyezés” fejléc megadásával megpróbálhatja újra a kérést. Ennek tartalmaznia kell az alkalmazott módszert (Basic), amelyet a felhasználó nevének és a jelszónak a Base64-ben való ábrázolása követ, amelyet a „:” (kettőspont) karakter választ el.

Például az "Aladdin" felhasználó "nyitott szezám" jelszóval történő hitelesítéséhez az ügyfél a következőket küldi:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

QWxhZGRpbjpvcGVuIHNlc2FtZQ==a szöveg Base64 reprezentációja Aladdin:open sesame.

"Digest" módszer

Ez a módszer nem továbbítja a jelszót egyértelműen, de megköveteli, hogy azt egyértelműen tárolja (vagy SHA1 kivonatát, amely elegendő önmagának azonosításához, ezért jelszónak tekinthető). Még ha ez a módszer biztonságosabb is, mint az "Basic" módszer, mégis érzékeny a támadásokra (kommunikációs lehallgatás stb.), És még érzékenyebb bizonyos támadásokra (jelszófájlok lopása).

A „Digest” módszer összetettebb és több paramétert használ.

Azonosítási kérelem

A szerver kérelmet küldhet a műfaj azonosítására:

WWW-Authenticate: Digest realm="[email protected]", qop="auth, auth-int", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", opaque="5ccc069c403ebaf9f0171e9517f40e41"

A paraméterek vesszővel vannak elválasztva, és a következők:

realm Ez a beállítás megjelenik a felhasználó számára, hogy tudják, milyen nevet és jelszót használhatnak. A karakterláncnak tartalmaznia kell legalább a gép nevét és a szükséges felhasználói csoport nevét. domain (opcionális) Az URI-k szóközzel elválasztott listáját tartalmazza, amelyek meghatározzák a védelmi tartományt. Ez a paraméter megadja azon URI-k listáját, amelyekre a kért felhasználó érvényes. nonce A szerver által generált karakterlánc minden 401 válaszhoz. Javasoljuk, hogy ez a karakterlánc Base64 vagy hexadecimális karaktereket használjon . Ezt a paramétert használják az ügyfél válaszának kiszámításához. opaque (opcionális) A kiszolgáló által létrehozott karakterlánc, amelyet az ügyfélnek vissza kell adnia. stale (opcionális) Ennek a paraméternek két lehetséges értéke van: igaz vagy hamis . Ez igaz, ha az előző azonosító kérelmet elutasította csak azért, mert az olyan régi érték a „nonce” paraméter false másként. Az true érték azt jelzi, hogy az ügyfélnek újra kell próbálnia a kérést a kiszolgáló által biztosított új nonce érték felhasználásával, anélkül, hogy újból kéri a felhasználót egy név és jelszó megadásáról. algorithm (nem kötelező) Jelöli a kivonatolási funkciókhoz használandó algoritmust. Az RFC  2617 két értéket határoz meg : MD5 vagy MD5-sess . qop (opcionális) (A védelem minősége) Ez a paraméter jelzi a támogatott védelmi szinteket: auth vagy auth-int . Az ügyfél azonosítása

A „Digest” módszerrel azonosító ügyfél két függvényt használ bizonyos paraméterek kiszámításához:

H(data) = MD5(data)

A H függvény az MD5 hash függvény eredményét adja vissza karakterlánc formájában (hexadecimális formátum, kisbetűvel) . Használhat másik hash algoritmust is ( például SHA ). Az alkalmazott algoritmust az „algoritmus” paraméter határozza meg.

KD(secret, data) = H(secret:data)

A KD függvény a H függvényt hívja argumentumként a két paraméter összefűzésének titkos és kettősponttal elválasztott adatoknak .

Az ügyfél ezért elküldi az „Engedélyezés” fejlécet, amely tartalmazza a „Digest” módszer nevét és a paramétereket:

username Felhasználónév. realm Ugyanaz az érték, mint a szerver válasza. nonce Ugyanaz az érték, mint a szerver válasza. algorithm Ugyanaz az érték, mint a szerver válasza. opaque Ugyanaz az érték, mint a szerver válasza. uri A kért védett erőforrás URI-je (itt lemásoljuk, mert egyes proxyk módosíthatják az eredeti URI-t). response Ez a paraméter 32 hexadecimális számjegyet tartalmaz, amely az ügyfél által kiszámított értéket képviseli, igazolva, hogy tudja a jelszót. qop (opcionális) (A védelem minősége) Ez a paraméter az alkalmazott védelem szintjét jelzi. Ennek meg kell egyeznie a szerver által visszaadott értékek egyikével. cnonce (ha qop van) Az ügyfél által generált karakterlánc. nc (ha qop van jelen) (Nonce Count) 8 hexadecimális számjegy, amely azt jelzi, hogy a kliens a szerver által visszaadott "nonce" paraméter értékét hányszor használta az ügyfél. nc = 00000001 először.

A paraméter értékének kiszámítása a responsekövetkezőképpen történik:

Ha meg qopvan adva:

response = KD( H(A1), nonce:nc:cnonce:qop:H(A2) )

Ha nem :

response = KD( H(A1), nonce:H(A2) )

Ha algorithmaz MD5 vagy nincs megadva:

A1 = username:realm:password

ha algorithmaz MD5-sess  :

A1 = H(username:realm:password):nonce:cnonce

Ha qopvan auth , vagy nincs megadva:

A2 = http-method:uri

if qopis auth-int  :

A2 = http-method:uri:H(entity)


Szerver válasza

A kiszolgáló újraszámolja az ügyfelekkel megegyező értékeket, hogy ellenőrizze az azonosítás sikeres-e.

Ha a szerver pozitívan reagál (a felhasználó és a jelszó helyes), akkor a válaszban elküldi a "Authentication-Info" HTTP fejlécet, amely információkat tartalmaz a sikeres azonosításról és a következő azonosításról.

Ez a fejléc a paraméterek vesszővel elválasztott listáját is tartalmazza:

nextnonce A védelmi tartomány jövőbeni azonosításaihoz használandó érték. qop ( Választható ) a válaszra alkalmazott védelem minősége . Ennek a paraméternek ugyanannak az értéknek kell lennie, mint az ügyfélkérésben. rspauth ( Ha qop meg van adva ) Ezt a kölcsönös azonosító paramétert használják annak bizonyítására, hogy a szerver ismeri a felhasználót és a jelszavát is. Számítása ugyanúgy, mint a válasz paraméter kivételével értéke A2 ahol http-módszer egy üres karakterlánc. cnonce ( Ha a qop meg van adva ) Ugyanaz az érték, mint az ügyfél kérésében. nc ( Ha a qop meg van adva ) Ugyanaz az érték, mint az ügyfél kérésében.


A proxy ( proxy ) azonosítása

A fent leírt azonosítás a felhasználó és az eredetszerver között történik:

Az is lehetséges, hogy azonosítsa magát a köztes szervereken:

  • Felhasználó a proxyhoz
  • Proxy a proxyhoz
  • Proxy az eredeti szerverhez.

Ehhez a HTTP Proxy-Authenticate és Proxy-Authorization fejléceket használják a WWW-Authenticate és Authorization fejlécek helyett . A 401 HTTP helyett 407 HTTP állapotkódot használunk.

A Proxy-Authentication-Info fejlécnek ugyanaz a szerepe, mint a Authentication-Info fejlécnek .

Előfordulhat, hogy az ügyfélnek azonosítania kell magát a proxy és az origó kiszolgáló számára is, de nem ugyanazon válaszban.

Azonosítás nem használható átlátszó proxy esetén

Megjegyzések és hivatkozások

  1. (in) Megjegyzések iránti kérelem, n o  2617 .

Lásd is

Kapcsolódó cikkek

Külső linkek

  • (en) RFC 2617 - Authentication: Basic and Digest Access Authentication - 1999. június