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.