HttpClient Basic Authentication
1. Áttekintés
Ez az oktatóanyag bemutatja, hogyan kell konfigurálja az alapvető hitelesítést az Apache HttpClient 4 alkalmazásban.
Ha mélyebbre akarsz ásni, és további jó dolgokat akarsz megtudni, amit a HttpClient-nel tehetsz - menj tovább a fő HttpClient oktatóanyag.
2. Alapvető hitelesítés az API-val
Kezdjük azzal a HttpClient alapszintű hitelesítésének konfigurálásának szokásos módja - a segítségével CredentialsProvider:
CredentialsProvider szolgáltató = new BasicCredentialsProvider (); UsernamePasswordCredentials hitelesítő adatok = new UsernamePasswordCredentials ("user1", "user1Pass"); szolgáltató.setCredentials (AuthScope.ANY, hitelesítő adatok); HttpClient kliens = HttpClientBuilder.create () .setDefaultCredentialsProvider (szolgáltató) .build (); HttpResponse response = client.execute (új HttpGet (URL_SECURED_BY_BASIC_AUTHENTICATION)); int statusCode = response.getStatusLine () .getStatusCode (); assertThat (statusCode, equalTo (HttpStatus.SC_OK));
Mint láthatjuk, az ügyfél létrehozása hitelesítő adatok szolgáltatóval az alap hitelesítéssel történő beállításához nem nehéz.
Most, hogy megértsük, mit HttpClient a színfalak mögött fog tenni, meg kell néznünk a naplókat:
# ... kérést hitelesítő adatok nélkül küldünk [main] DEBUG ... - Hitelesítés szükséges [main] DEBUG ... - localhost: 8080 hitelesítést kért [main] DEBUG ... - Hitelesítési sémák preferencia sorrendben: tárgyalás, Kerberos, NTLM, Digest, Basic] [main] DEBUG ... - A tárgyalási hitelesítési séma kihívása nem érhető el [main] DEBUG ... - Kihívás a Kerberos hitelesítési sémára nem érhető el [main] DEBUG ... - Kihívás Az NTLM hitelesítési séma nem érhető el [main] DEBUG ... - Challenge for Digest hitelesítési séma nem érhető el [main] DEBUG ... - Kiválasztott hitelesítési lehetőségek: [BASIC] # ... a kérést újra elküldik - hitelesítő adatokkal
Az egész Az ügyfél-szerver kommunikáció most már tiszta:
- az ügyfél elküldi a HTTP kérést hitelesítő adatok nélkül
- a szerver visszaküldi a kihívást
- az Ügyfél tárgyalásokat folytat és azonosítja a megfelelő hitelesítési rendszert
- az Ügyfél elküldi egy második kérés, ezúttal hitelesítő adatokkal
3. Megelőző alapvető hitelesítés
A dobozon kívül a HttpClient nem végez megelőző hitelesítést. Ehelyett ennek kifejezetten az ügyfél által hozott döntésnek kell lennie.
Első, létre kell hoznunk a HttpContext - előzetes feltöltése hitelesítési gyorsítótárral előre kiválasztott megfelelő típusú hitelesítési sémával. Ez azt jelenti, hogy az előző példa szerinti tárgyalásra már nincs szükség - Az alap hitelesítés már kiválasztva:
HttpHost targetHost = új HttpHost ("localhost", 8082, "http"); CredentialsProvider credsProvider = új BasicCredentialsProvider (); credsProvider.setCredentials (AuthScope.ANY, új UsernamePasswordCredentials (DEFAULT_USER, DEFAULT_PASS)); AuthCache authCache = új BasicAuthCache (); authCache.put (targetHost, új BasicScheme ()); // AuthCache hozzáadása a végrehajtási környezethez HttpClientContext context = HttpClientContext.create (); context.setCredentialsProvider (credsProvider); context.setAuthCache (authCache);
Most már használhatjuk a klienst az új kontextussal és küldje el az előzetes hitelesítési kérelmet:
HttpClient kliens = HttpClientBuilder.create (). Build (); válasz = client.execute (új HttpGet (URL_SECURED_BY_BASIC_AUTHENTICATION), összefüggés); int statusCode = response.getStatusLine (). getStatusCode (); assertThat (statusCode, equalTo (HttpStatus.SC_OK));
Nézzük meg a naplókat:
[main] DEBUG ... - A gyorsítótárazott 'basic' hitelesítési séma újrafelhasználása a // localhost számára: 8082 [main] DEBUG ... - A GET / spring-security-rest-basic-auth / api / foos / 1 kérés végrehajtása HTTP / 1.1 [main] DEBUG ... >> GET / spring-security-rest-basic-auth / api / foos / 1 HTTP / 1.1 [main] DEBUG ... >> Host: localhost: 8082 [main] DEBUG ... >> Engedélyezés: Basic dXNlcjE6dXNlcjFQYXNz [main] DEBUG ... << HTTP / 1.1 200 OK [main] DEBUG ... - A hitelesítés sikeres
Minden rendben van:
- az „Alapvető hitelesítés” séma előre van kiválasztva
- a kérést a Engedélyezés fejléc
- a szerver a-val válaszol 200 OK
- A hitelesítés sikeres
4. Alapvető hitelesítés nyers HTTP fejlécekkel
A megelőző alapvető hitelesítés alapvetően a Engedélyezés fejléc.
Tehát ahelyett, hogy áttekinteném a meglehetősen összetett előző példát a beállításához, átvehetjük ennek a fejlécnek az irányítását és kézzel elkészíthetjük:
HttpGet request = új HttpGet (URL_SECURED_BY_BASIC_AUTHENTICATION); Karakterlánc hitelesítése = DEFAULT_USER + ":" + DEFAULT_PASS; byte [] encodedAuth = Base64.encodeBase64 (auth.getBytes (StandardCharsets.ISO_8859_1)); String authHeader = "Basic" + új String (encodedAuth); request.setHeader (HttpHeaders.AUTHORIZATION, authHeader); HttpClient kliens = HttpClientBuilder.create (). Build (); HttpResponse response = client.execute (kérés); int statusCode = response.getStatusLine (). getStatusCode (); assertThat (statusCode, equalTo (HttpStatus.SC_OK));
Ellenőrizzük, hogy ez megfelelően működik-e:
[main] DEBUG ... - Azonosító gyorsítótár nincs beállítva a [main] DEBUG kontextusban - Kapcsolat megnyitása {} -> // localhost: 8080 [main] DEBUG ... - Csatlakozás localhost / 127.0.0.1: 8080 [main] DEBUG ... - GET / spring-security-rest-basic-auth / api / foos / 1 HTTP / 1.1 [main] DEBUG ... - Proxy hitelesítési állapot: UNCHALLENGED [main] DEBUG .. . - http-outgoing-0 >> GET / spring-security-rest-basic-auth / api / foos / 1 HTTP / 1.1 [main] DEBUG ... - http-outgoing-0 >> Engedélyezés: Basic dXNlcjE6dXNlcjFQYXNz [main ] DEBUG ... - http-outgoing-0 << HTTP / 1.1 200 OK
Tehát, bár nincs hitelesítő gyorsítótár, Az alapvető hitelesítés továbbra is megfelelően működik, és megkapjuk 200 OK.
5. Következtetés
Ez a cikk az Apache HttpClient 4 segítségével az alapvető hitelesítés beállításának és használatának különböző módjait szemlélteti.
Mint mindig, az ebben a cikkben bemutatott kód elérhető a Github oldalon. Ez egy Maven-alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.