Godkendelse med HttpUrlConnection

Java Top

Jeg har lige annonceret det nye Lær foråret kursus med fokus på det grundlæggende i Spring 5 og Spring Boot 2:

>> KONTROLLER KURSEN

1. Oversigt

I denne vejledning skal vi undersøge, hvordan du godkender HTTP-anmodninger ved hjælp af HttpUrlConnection klasse.

2. HTTP-godkendelse

I webapplikationer kan servere kræve, at klienter godkender sig selv. Manglende overholdelse resulterer normalt i, at serveren returnerer en HTTP 401 (uautoriseret) statuskode.

Der er flere godkendelsesordninger, der adskiller sig i sikkerhedsstyrken, de giver. Imidlertid varierer implementeringsindsatsen også.

Lad os se tre af dem:

  • grundlæggende er en ordning, som vi vil sige mere om i det næste afsnit
  • fordøje anvender hash-algoritmer på brugeroplysninger og en server-specificeret nonce
  • bærer bruger adgangstokener som en del af OAuth 2.0

3. Grundlæggende godkendelse

Grundlæggende godkendelse giver klienter mulighed for at godkende sig selv ved hjælp af en kodet brugernavn og adgangskode via Bemyndigelse header:

GET / HTTP / 1.1 Autorisation: Grundlæggende dXNlcjpwYXNzd29yZA ==

For at oprette det kodede brugernavn og adgangskodestreng baserer vi simpelthen Base64-kodning af brugernavnet efterfulgt af et kolon efterfulgt af adgangskoden:

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

Husk dog en vis forsigtighed fra RFC 7617:

Denne ordning anses ikke for at være en sikker metode til brugergodkendelse, medmindre den bruges i forbindelse med et eksternt sikkert system såsom TLS

Dette er naturligvis, da brugernavnet og adgangskoden rejser som almindelig tekst over netværket inden for hver anmodning.

4. Godkend en forbindelse

Okay, med det som baggrund, lad os springe ind i konfigurationen HttpUrlConnection at bruge HTTP Basic.

Klassen HttpUrlConnection kan sende anmodninger, men først skal vi hente en forekomst af det fra et URL-objekt:

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

En forbindelse tilbyder mange metoder til at konfigurere den, ligesom setRequestMethod og setRequestProperty.

Så mærkeligt som setRequestProperty lyder, det er den vi ønsker.

Når vi har tilsluttet brugernavnet og adgangskoden ved hjælp af “:”, kan vi bruge java.util.Base64 klasse for at kode legitimationsoplysningerne:

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

Derefter opretter vi headerværdien ud fra den bogstavelige "Basic" efterfulgt af de kodede legitimationsoplysninger:

String authHeaderValue = "Grundlæggende" + ny streng (kodetAuth);

Dernæst kalder vi metoden setRequestProperty (nøgle, værdi) for at godkende anmodningen. Som nævnt tidligere, vi er nødt til at bruge "Bemyndigelse" som vores header og "Grundlæggende" + kodede legitimationsoplysninger som vores værdi:

connection.setRequestProperty ("Autorisation", authHeaderValue);

Endelig er vi nødt til faktisk at sende HTTP-anmodningen, som for eksempel ved at ringe getResponseCode (). Som et resultat får vi en HTTP-svarskode fra serveren:

int responseCode = connection.getResponseCode ();

Alt i familien 2xx betyder, at vores anmodning inklusive godkendelsesdelen var okay!

5. Java Authenticator

Ovennævnte grundlæggende godkendelsesimplementering kræver indstilling af autorisationsoverskriften for hver anmodning. Derimod den abstrakte klasse java.net.Authenticator tillader indstilling af godkendelse globalt for alle forbindelser.

Vi er nødt til at udvide klassen først. Derefter kalder vi den statiske metode Authenticator.setDefault () for at registrere en forekomst af vores autentificator:

Authenticator.setDefault (ny BasicAuthenticator ());

Vores grundlæggende auth-klasse tilsidesætter bare getPasswordAuthentication () ikke-abstrakt metode i basisklassen:

privat endelig klasse BasicAuthenticator udvider Authenticator {beskyttet PasswordAuthentication getPasswordAuthentication () {returner ny PasswordAuthentication (bruger, password.toCharArray ()); }}

Authenticator-klassen bruger legitimationsoplysningerne til vores autentificering til automatisk at opfylde den godkendelsesplan, der kræves af serveren.

6. Konklusion

I denne korte vejledning har vi set hvordan man anvender grundlæggende godkendelse på anmodninger sendt via HttpUrlConnection.

Som altid kan kodeeksemplet findes på GitHub.

Java bund

Jeg har lige annonceret det nye Lær foråret kursus med fokus på det grundlæggende i Spring 5 og Spring Boot 2:

>> KONTROLLER KURSEN