Autentisering med HttpUrlConnection

Java Top

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET

1. Oversikt

I denne opplæringen skal vi utforske hvordan du autentiserer HTTP-forespørsler ved hjelp av HttpUrlConnection klasse.

2. HTTP-godkjenning

I webapplikasjoner kan servere kreve at klienter autentiserer seg selv. Manglende overholdelse fører vanligvis til at serveren returnerer en HTTP 401 (uautorisert) statuskode.

Det er flere autentiseringsskjemaer som avviker i sikkerhetsstyrken de gir. Imidlertid varierer også implementeringsarbeidet.

La oss se tre av dem:

  • grunnleggende er en ordning som vi vil si mer om i neste avsnitt
  • fordøye bruker hash-algoritmer på brukerlegitimasjon og en server-spesifisert nonce
  • bærer bruker tilgangstokener som en del av OAuth 2.0

3. Grunnleggende godkjenning

Grunnleggende autentisering tillater klienter å autentisere seg ved hjelp av en kodet brukernavn og passord via Autorisasjon Overskrift:

GET / HTTP / 1.1 Autorisasjon: Grunnleggende dXNlcjpwYXNzd29yZA ==

For å opprette det kodede brukernavnet og passordstrengen, baserer vi bare Base64-kodingen av brukernavnet, etterfulgt av et kolon, etterfulgt av passordet:

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

Husk litt forsiktighet fra RFC 7617, skjønt:

Denne ordningen anses ikke å være en sikker metode for brukerautentisering med mindre den brukes sammen med noe eksternt sikkert system som TLS

Dette er selvfølgelig siden brukernavnet og passordet går som ren tekst over nettverket i hver forespørsel.

4. Autentiser en tilkobling

Ok, med det som bakgrunn, la oss hoppe inn i å konfigurere HttpUrlConnection å bruke HTTP Basic.

Klassen HttpUrlConnection kan sende forespørsler, men først må vi skaffe en forekomst av det fra et URL-objekt:

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

En tilkobling tilbyr mange metoder for å konfigurere den, som setRequestMethod og setRequestProperty.

Så rart som setRequestProperty lyder, dette er den vi vil ha.

Når vi har blitt med brukernavnet og passordet ved hjelp av “:”, kan vi bruke java.util.Base64 klasse for å kode legitimasjonen:

String auth = user + ":" + passord; byte [] encodedAuth = Base64.encodeBase64 (auth.getBytes (StandardCharsets.UTF_8));

Deretter oppretter vi toppverdien fra bokstavelig "Basic" etterfulgt av de kodede legitimasjonene:

String authHeaderValue = "Basic" + new String (encodedAuth);

Deretter kaller vi metoden setRequestProperty (nøkkel, verdi) for å autentisere forespørselen. Som nevnt tidligere, vi må bruke "Autorisasjon" som vår overskrift og “Grunnleggende” + kodet legitimasjon som vår verdi:

connection.setRequestProperty ("Autorisasjon", authHeaderValue);

Til slutt må vi faktisk sende HTTP-forespørselen, som for eksempel ved å ringe getResponseCode (). Som et resultat får vi en HTTP-svarskode fra serveren:

int responseCode = connection.getResponseCode ();

Alt i 2xx-familien betyr at forespørselen vår inkludert autentiseringsdelen var i orden!

5. Java Authenticator

Ovennevnte grunnleggende godkjenning av autorisering krever at du angir autorisasjonsoverskriften for hver forespørsel. Derimot den abstrakte klassen java.net.Authenticator tillater sette autentisering globalt for alle tilkoblinger.

Vi må utvide klassen først. Deretter kaller vi den statiske metoden Authenticator.setDefault () for å registrere en forekomst av autentisatoren vår:

Authenticator.setDefault (ny BasicAuthenticator ());

Vår grunnleggende auth-klasse overstyrer bare getPasswordAuthentication () ikke-abstrakt metode for baseklassen:

privat sluttklasse BasicAuthenticator utvider Authenticator {beskyttet PasswordAuthentication getPasswordAuthentication () {returner nytt PasswordAuthentication (bruker, password.toCharArray ()); }}

Authenticator-klassen bruker legitimasjonen til autentisatoren vår for å oppfylle autentiseringsskjemaet som serveren krever automatisk.

6. Konklusjon

I denne korte opplæringen har vi sett hvordan du bruker grunnleggende autentisering på forespørsler sendt via HttpUrlConnection.

Som alltid kan kodeeksemplet bli funnet på GitHub.

Java bunn

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET

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