Autentifikácia pomocou HttpUrlConnection

Java Top

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

1. Prehľad

V tomto výučbe sa chystáme preskúmať, ako overiť požiadavky HTTP pomocou HttpUrlConnection trieda.

2. HTTP autentifikácia

Vo webových aplikáciách môžu servery vyžadovať autentifikáciu klientov. Nedodržanie zvyčajne vedie k tomu, že server vráti stavový kód HTTP 401 (Neoprávnené).

Existuje niekoľko schém overovania totožnosti, ktoré sa líšia zabezpečenou silou zabezpečenia. Realizačné úsilie sa však tiež líši.

Pozrime sa na tri z nich:

  • základné je schéma, o ktorej si povieme viac v nasledujúcej časti
  • stráviť použije hašovacie algoritmy na prihlasovacie údaje používateľa a serverom určené nonce
  • nositeľ využíva prístupové tokeny ako súčasť protokolu OAuth 2.0

3. Základné overenie

Základné overenie umožňuje klientom autentifikovať sa pomocou servera zakódované užívateľské meno a heslo cez Povolenie hlavička:

Autorizácia GET / HTTP / 1.1: Základné dXNlcjpwYXNzd29yZA ==

Aby sme vytvorili kódovaný reťazec užívateľského mena a hesla, jednoducho zakódujeme Base64 užívateľským menom, za ktorým nasleduje dvojbodka a za ním heslo:

basic (user, pass) = base64-encode (user + ":" + pass)

Pamätajte však na určité upozornenie z RFC 7617:

Táto schéma sa nepovažuje za bezpečnú metódu autentifikácie používateľa, pokiaľ sa nepoužíva v spojení s externým zabezpečeným systémom, ako je TLS

Je to samozrejme preto, lebo meno používateľa a heslo cestujú po sieti ako obyčajný text v rámci každej žiadosti.

4. Overte pripojenie

Dobre, s týmto pozadím, poďme na konfiguráciu HttpUrlConnection používať HTTP Basic.

Trieda HttpUrlConnection môžeme posielať žiadosti, ale najskôr musíme získať jeho inštanciu z objektu URL:

HttpURLConnection pripojenie = (HttpURLConnection) url.openConnection ();

Pripojenie ponúka mnoho spôsobov, ako ho nakonfigurovať setRequestMethod a setRequestProperty.

Rovnako zvláštne ako setRequestProperty zvuky, toto je ten, ktorý chceme.

Keď sme sa pripojili k užívateľskému menu a heslu pomocou „:“, môžeme používať java.util.Base64 triedy na kódovanie poverení:

Reťazec auth = užívateľ + ":" + heslo; byte [] encodedAuth = Base64.encodeBase64 (auth.getBytes (StandardCharsets.UTF_8));

Potom vytvoríme hodnotu hlavičky z doslovného jazyka „Basic“, za ktorým nasledujú kódované poverenia:

Reťazec authHeaderValue = "Základné" + nový reťazec (encodedAuth);

Ďalej voláme metódu setRequestProperty (kľúč, hodnota) na autentifikáciu žiadosti. Ako už bolo spomenuté, musíme použiť „Autorizácia“ ako naša hlavička a „Základné“ + poverenia kódované ako naša hodnota:

connection.setRequestProperty ("Autorizácia", authHeaderValue);

Nakoniec musíme skutočne odoslať požiadavku HTTP, napríklad zavolaním getResponseCode (). Vo výsledku dostaneme zo servera kód odpovede HTTP:

int responseCode = connection.getResponseCode ();

Čokoľvek z rodiny 2xx znamená, že naša požiadavka vrátane overovacej časti bola v poriadku!

5. Java Authenticator

Vyššie uvedená základná implementácia autorizácie vyžaduje nastavenie autorizačnej hlavičky pre každú požiadavku. Naproti tomu abstraktná trieda java.net.Authenticator umožňuje nastavenie autentifikácie globálne pre všetky pripojenia.

Najprv musíme rozšíriť triedu. Potom zavoláme statickú metódu Authenticator.setDefault () za účelom registrácie inštancie nášho autentifikátora:

Authenticator.setDefault (nový BasicAuthenticator ());

Naša základná trieda auth iba prepíše getPasswordAuthentication () neabstraktná metóda základnej triedy:

súkromná finálna trieda BasicAuthenticator rozširuje Authenticator {chránené PasswordAuthentication getPasswordAuthentication () {vrátiť nové PasswordAuthentication (user, password.toCharArray ()); }}

Trieda Authenticator využíva poverenia nášho autentifikátora na automatické splnenie schémy autentifikácie požadovanej serverom.

6. Záver

V tomto krátkom tutoriáli sme videli, ako aplikovať základné overenie na požiadavky odoslané cez HttpUrlConnection.

Príklad kódu možno ako vždy nájsť na GitHub.

Java dole

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

$config[zx-auto] not found$config[zx-overlay] not found