Egyszerű egyszeri bejelentkezés a Spring Security OAuth2-vel (régi verem)

1. Áttekintés

Ebben az oktatóanyagban megvitatjuk az SSO - egyszeri bejelentkezés - megvalósítását a Spring Security OAuth és a Spring Boot használatával.

Három külön alkalmazást fogunk használni:

  • Authorization Server - amely a központi hitelesítési mechanizmus
  • Két kliens alkalmazás: az egyszeri bejelentkezést használó alkalmazások

Nagyon leegyszerűsítve: amikor a felhasználó megpróbál hozzáférni egy biztonságos oldalhoz az ügyfélalkalmazásban, akkor először átirányítják őket a hitelesítésre a Hitelesítési kiszolgálón keresztül.

És használni fogjuk a megerősítő kód adjon meg egy típust az OAuth2-ből a hitelesítés delegálásának elősegítésére.

jegyzet: ez a cikk a Spring OAuth örökölt projektet használja. Ennek a cikknek az új, a Spring Security 5 veremét használó változatához olvassa el az Egyszerű egyszeri bejelentkezés a Spring Security OAuth2 című cikkünket.

2. A kliens alkalmazás

Kezdjük az Ügyfélalkalmazással; természetesen a Spring Boot-ot használjuk a konfiguráció minimalizálása érdekében:

2.1. Maven-függőségek

Először a következő függőségekre lesz szükségünk pom.xml:

 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-security org.springframework.security.oauth.boot spring-security-oauth2-autoconfigure 2.0.1. spring-boot-starter-thymeleaf org.thymeleaf.extras thymeleaf-extras-springsecurity4 

2.2. Biztonsági konfiguráció

Ezután a legfontosabb rész, az ügyfélalkalmazás biztonsági konfigurációja:

@Configuration @ EnableOAuth2Sso public class UiSecurityConfig kiterjeszti a WebSecurityConfigurerAdapter {@Override public void configure (HttpSecurity http) dobja a {http.antMatcher ("/ **") kivételt .authorizeRequests () .antMatchers ("/", "login .permitAll () .anyRequest () .hitelesített (); }}

Ennek a konfigurációnak a központi része természetesen a @ EnableOAuth2Sso jelölés, amelyet az egyszeri bejelentkezés engedélyezéséhez használunk.

Ne feledje, hogy ki kell terjesztenünk a WebSecurityConfigurerAdapter - enélkül az összes útvonal biztonságban lesz - így a felhasználókat átirányítják a bejelentkezéshez, amikor bármilyen oldalra megpróbálnak belépni. Esetünkben itt csak az index és a bejelentkezési oldalak érhetők el hitelesítés nélkül.

Végül meghatároztuk a RequestContextListener bab a kérelmek hatókörének kezelésére.

És a alkalmazás.yml:

szerver: port: 8082 servlet: context-path: / ui session: cookie: név: UISESSION security: basic: engedélyezve: false oauth2: client: clientId: SampleClientId clientSecret: secret accessTokenUri: // localhost: 8081 / auth / oauth / token userAuthorizationUri: // localhost: 8081 / auth / oauth / authorize resource: userInfoUri: // localhost: 8081 / auth / user / me spring: thymeleaf: cache: false

Néhány gyors megjegyzés:

  • letiltottuk az alapértelmezett alap hitelesítést
  • accessTokenUri az URI az Access Tokenek megszerzéséhez
  • userAuthorizationUri az az engedélyezési URI, amelyre a felhasználókat átirányítják
  • userInfoUri a felhasználói végpont URI-je az aktuális felhasználói adatok megszerzéséhez

Vegye figyelembe azt is, hogy az itt bemutatott példánkban mi hoztuk létre a Authorization Serverünket, de természetesen használhatunk más, harmadik féltől származó szolgáltatókat is, például a Facebookot vagy a GitHub-ot.

2.3. Front End

Most vessünk egy pillantást az ügyfélalkalmazás elülső konfigurációjára. Itt nem erre fogunk összpontosítani, főleg azért, mert a webhelyen már bemutattuk.

Ügyfélalkalmazásunk itt nagyon egyszerű kezelőfelülettel rendelkezik; itt van a index.html:

 Belépés

És a securedPage.html:

 Üdvözlöm, Név

A securedPage.html oldalon a felhasználók hitelesítésére volt szükség. Ha egy nem hitelesített felhasználó megpróbál hozzáférni securedPage.html, először a bejelentkezési oldalra irányítják őket.

3. Az Auth Server

Most itt beszéljük meg a Hitelesítési szervert.

3.1. Maven-függőségek

Először meg kell határoznunk a függőségeket pom.xml:

 org.springframework.boot spring-boot-starter-web org.springframework.security.oauth spring-security-oauth2 2.3.3. KÖZLEMÉNY 

3.2. OAuth-konfiguráció

Fontos megérteni, hogy itt együtt fogjuk futtatni az Authorization Server és az Resource Server szervereket, egyetlen telepíthető egységként.

Kezdjük az erőforrás-kiszolgálónk konfigurálásával - amely elsődleges indító alkalmazásként is működik:

@SpringBootApplication @EnableResourceServer nyilvános osztály A AuthorizationServerApplication kiterjeszti a SpringBootServletInitializer {public static void main (String [] args) {SpringApplication.run (AuthorizationServerApplication.class, args); }}

Ezután konfiguráljuk a Hitelesítési szervert:

@Configuration @EnableAuthorizationServer nyilvános osztály Az AuthServerConfig kiterjeszti az AuthorizationServerConfigurerAdapter {@Autowired private BCryptPasswordEncoder passwordEncoder; A @Orride public void configure (AuthorizationServerSecurityConfigurer oauthServer) dobja a {oauthServer.tokenKeyAccess ("allowAll ()") .checkTokenAccess ("isAuthenticated ()" kivételt; } A @Orride public void configure (ClientDetailsServiceConfigurer ügyfelek) a (z) {clients.inMemory () .WithClient ("SampleClientId") .secret (passwordEncoder.encode ("titkos")) .authorizedGrantTypes ("autoration_code" user ") scopes ( ) .autoApprove (true) .redirectUris ("// localhost: 8082 / ui / login", "// localhost: 8083 / ui2 / login"); }}

Vegye figyelembe, hogy csak egy egyszerű klienst engedélyezünk a megerősítő kód támogatás típusa.

Ezenkívül vegye figyelembe, hogyan autoApprove értéke igaz, hogy ne irányítsanak minket át és ne lépjenek fel a hatókörök kézi jóváhagyására.

3.3. Biztonsági konfiguráció

Először letiltjuk az alapértelmezett alap hitelesítést a mi alkalmazás.tulajdonságok:

server.port = 8081 server.servlet.context-path = / auth

Most térjünk át a konfigurációra, és definiáljunk egy egyszerű űrlap bejelentkezési mechanizmust:

A @Configuration @Order (1) nyilvános osztály, a SecurityConfig kiterjeszti a WebSecurityConfigurerAdapter {@Orride védett void konfigurációját (HttpSecurity http) a {http.requestMatchers () .antMatchers ("/ login", "/ oauth / authorize") és () kivételt dobja. authorizeRequests () .anyRequest (). hitelesített () .és () .formLogin (). allowAll (); } A @Orride védett void konfiguráció (AuthenticationManagerBuilder auth) dobja a (z) {auth.inMemoryAuthentication (). Kivételet. } @Bean public BCryptPasswordEncoder passwordEncoder () {return new BCryptPasswordEncoder (); }}

Ne feledje, hogy egyszerű memóriában történő hitelesítést használtunk, de egyszerűen helyettesíthetjük egy egyedi beállítással userDetailsService.

3.4. Felhasználói végpont

Végül létrehozzuk a konfigurációnkban korábban használt felhasználói végpontunkat:

@RestController public class UserController {@GetMapping ("/ user / me") public Principal user (Fő megbízó) {return principál; }}

Természetesen ez a felhasználói adatokat JSON-ábrázolással adja vissza.

4. Következtetés

Ebben a gyors bemutatóban az egyszeri bejelentkezés megvalósítására összpontosítottunk a Spring Security Oauth2 és a Spring Boot használatával.

Mint mindig, a teljes forráskód megtalálható a GitHubon.