springsecurity sso
时间: 2023-12-25 16:30:08 浏览: 29
Spring Security SSO(Single Sign-On)是基于Spring Security框架现的单点登录解决方案。它允许用户只需登录一次,即可在多个应用程序中访问受保护的资源,而无需再次输入凭据。
在Spring Security SSO中,有一个身份提供者(Identity Provider,简称IdP)和多个服务提供者(Service Provider,简称SP)。IdP负责验证用户的身份并颁发令牌,而SP则使用这些令牌来验证用户的身份并授权访问受保护的资源。
下面是一个简单的Spring Security SSO的示例:
1. 配置身份提供者(IdP):
```java
@Configuration
@EnableWebSecurity
public class IdpSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/home")
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login?logout")
.and()
.csrf().disable();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("admin").password("{noop}admin").roles("USER");
}
}
```
2. 配置服务提供者(SP):
```java
@Configuration
@EnableWebSecurity
public class SpSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/home").authenticated()
.anyRequest().permitAll()
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/home")
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login?logout")
.and()
.csrf().disable();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("admin").password("{noop}admin").roles("USER");
}
}
```
在上述示例中,IdP和SP都使用了基于内存的用户认证,用户名为"admin",密码为"admin"。当用户访问受保护的资源时,会被重定向到登录页面进行身份验证。验证成功后,用户将被重定向回原始请求的URL。