Java >> Java tutorial >  >> Tag >> HTTP

Hvordan virker Http Basic Authentication i Spring Security?

I den sidste artikel har du lært, hvordan du aktiverer Http-grundlæggende godkendelse i Spring-sikkerhedsbaseret Java-applikation, og nu går vi et skridt videre for at forstå, hvordan præcis http basic-godkendelse fungerer i Spring-sikkerhed. Hvis du husker, når du bruger HTTP Basic til autentificeringsformål, klienten f.eks. browser eller en hvile-klient sender login-legitimationsoplysninger i http request header. Overskriften er passende navngivet som "Authorization ” og den indeholder baseret 64-kodet streng, som er oprettet ved at sammenkæde brugernavn og adgangskode ved hjælp af et kolon. For eksempel, hvis brugernavnet er "johnsmith" og adgangskoden er "JOHN3214" så bliver de sammenkædet som "johnsmith:JOHN3214" før kodet ved hjælp af base 64-kodningsalgoritmer.

Når serveren modtager en sådan anmodning, udtrækker den værdien "Authorization" header og afkoder indholdet af denne header ved hjælp af den samme algoritme Base64 til autentificering af brugeren.

Hvis du husker det, brugte vi <http-basic>l; i XML-konfiguration eller httpBasic() metode på HttpSecurity objekt for at aktivere grundlæggende godkendelse.

Lad os nu se, hvordan Spring-sikkerhed præcist understøtter Http Basic Authentication, og hvordan tingene bevæger sig inde i Spring-sikkerhedsområdet, når den modtager en login-anmodning, og Http Basic-godkendelse er aktiveret i serverenden.

Hvordan Spring Security Process Http Basic Authentication Requests

Når du bruger  <http-basic>l; konfigurationselement, Spring Securitys BasicAuthenticationFitler kommer ind i billedet, som grundlæggende tjekker, om indgående HTTP-anmodning indeholder "Authorization" header eller ej, og dens værdi starter med "Basic".

En BasicAuthenticationEntryPoint strategi er også konfigureret i ExceptionTranslationFilter ved opstart, som er påkrævet for at håndtere anmodningen, indeholder ikke "Autorisation"-header.

Når du laver en http-anmodning til en beskyttet URL, f.eks. /admin/users fra browseren uden at tilføje "Authorization ” header, så kaster Spring Security en undtagelse med nægtet adgang, der håndteres af ExceptionTranslationFilter .

Dette filter uddelegerer derefter til en bestemt implementeringsstrategi for AuthenticationEntryPoint interface, som er BaicAuthenticationEntryPoint i vores tilfælde.

Denne klasse tilføjer overskriften "WWW-Authenticate:Basic real="Spring Security Application" til svaret og sender derefter en HTTP-statuskode på 401 (Uautoriseret) til klienten, f.eks. til din browser, som ved, hvordan man håndterer denne kode og fungerer i overensstemmelse hermed, dvs. den viser en dialogboks, der beder om brugernavn og adgangskode, som nedenfor:

Når du indtaster brugernavnet og adgangskoden og indsender anmodningen, følger anmodningen igen filterkæden, indtil den når BasicAuthenticationFilter .

Dette filter kontrollerer anmodningsoverskrifterne, placeringen af ​​autorisationsoverskriften, der starter med "Basic " for eksempel. Autorisation:Grundlæggende CDWhZGRpbjpvcGVuc2AzYW1l.

BaicAuthentictionFilter udtrækker derefter indholdet af "Authorization ” header og bruger Base64-algoritmen til at afkode login-legitimationsoplysningerne for at udtrække brugernavnet og adgangskoden fra den afkodede streng.

Når først det har disse oplysninger, opretter filteret en UsernamePasswordAuthenticationToken objekt og sender det til godkendelsesadministratoren til godkendelse på standardmåden.

Hvis du ikke kender rollen som AuthenticationManager på forårssikkerhedslogin, så kan du lære mere om det i Eugens Learn Spring Security Course.

Godkendelsesadministratoren vil bede godkendelsesudbyderen (f.eks. i hukommelsen, JDBC-støttet eller LDAP-baseret) om at hente brugeren og derefter oprette et godkendelsesobjekt med den. Denne proces er standard og uafhængig af at bruge HTTP basic til autentificering, f.eks. gælder også for digest-godkendelse.

Hvis du arbejder i RESTful-webtjenester, kan du også bruge curl-kommandoen til at sende HTTP-anmodning med "Autorisation"-fejlen til grundlæggende HTTP-godkendelse. Jeg har fundet curl en nem måde at teste webtjenester på ved at sende forskellige HTTP-kommandoer fra kommandolinjen.

Du kan også se mit indlæg, hvordan man tester RESTful webtjenester for at finde ud af nogle praktiske eksempler på curl, f.eks. sende postanmodning, sende en anmodning med HTTP basic og Digest-godkendelse osv.

Btw, som jeg har sagt før, er grundlæggende godkendelse ikke sikker, alle, der kan opsnappe anmodningen, kan afkode adgangskoden, derfor bruges den kun til testformål, mens mere sofistikeret digest-godkendelse og OAuth bruges i den virkelige applikation, især hvis du ønsker at sikre din REST API.

Jeg vil fortælle dig mere om sikring af REST API i kommende artikler, men hvis du ikke kan vente, foreslår jeg, at du tjekker REST med Spring MasterClass, som også for nylig er opdateret til Spring Framework 5 og Spring Security 5.

Det handler om hvordan fungerer grundlæggende HTTP-godkendelse i Spring Security. Du har set den fulde arbejdsgang af, hvad der sker, når en HTTP-anmodning rammer en beskyttet URL, som anmoder om grundlæggende godkendelse. Det er dybest set BasicAuthenticationFilter som klarer det meste af jobbet sammen med BasicAuthenticationEntryPoint .

Andre Selvstudier i Spring Security og Ressourcer 

Lær Spring Security 4 Basic hands-on

Forskellen mellem @RestController og @Controller i Spring MVC?

Forskellen mellem @RequestParam og @PathVaraible i foråret?

3 onlinekurser for at lære forårssikkerhed bedre

Forskellen mellem @Service, @Component og @Controller i foråret?

5 kurser til at lære Spring Core, Spring MVC og Spring Boot

Spring Security Certification Class af Eugen Paraschiv

Tak fordi du læste denne artikel, hvis du kan lide min forklaring på, hvordan Http Basic Authentication fungerer i Spring Security, så del venligst denne artikel med dine venner og kolleger. Hvis du har spørgsmål til feedback, så skriv venligst en note.

Java tag