基於Spring Cloud 快速配置完成單點登陸開發

clipboard.png

單點登陸概念
單點登陸(Single Sign On),簡稱爲 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只須要登陸一次就能夠訪問全部相互信任的應用系統。登陸邏輯如上圖html

基於Spring 全家桶的實現

技術選型:web

Spring Boot

 Spring Cloud 

 Spring Security oAuth2

客戶端:

maven依賴redis

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
 <dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-jwt</artifactId>
</dependency>

EnableOAuth2Sso 註解

入口類配置@@EnableOAuth2Ssospring

@SpringBootApplication
 public class PigSsoClientDemoApplication {
public static void main(String[] args) {
SpringApplication.run(PigSsoClientDemoApplication.class, args);
 }
 }

配置文件

clipboard.png

SSO認證服務器

認證服務器配置

@Configuration
@Order(Integer.MIN\_VALUE)
@EnableAuthorizationServe
public class PigAuthorizationConfig extends AuthorizationServerConfigurerAdapter {
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
    clients.inMemory()

            .withClient(authServerConfig.getClientId())

            .secret(authServerConfig.getClientSecret())

            .authorizedGrantTypes(SecurityConstants.REFRESH\_TOKEN, SecurityConstants.PASSWORD,SecurityConstants.AUTHORIZATION\_CODE)

            .scopes(authServerConfig.getScope());

}



@Override

public void configure(AuthorizationServerEndpointsConfigurer endpoints) {

    endpoints

            .tokenStore(new RedisTokenStore(redisConnectionFactory))

            .accessTokenConverter(jwtAccessTokenConverter())

            .authenticationManager(authenticationManager)

            .exceptionTranslator(pigWebResponseExceptionTranslator)

            .reuseRefreshTokens(false)

            .userDetailsService(userDetailsService);

}



@Override

public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {

    security

            .allowFormAuthenticationForClients()

            .tokenKeyAccess("isAuthenticated()")

            .checkTokenAccess("permitAll()");

}



@Bean

public PasswordEncoder passwordEncoder() {

    return new BCryptPasswordEncoder();

}



@Bean

public JwtAccessTokenConverter jwtAccessTokenConverter() {

    JwtAccessTokenConverter jwtAccessTokenConverter = new JwtAccessTokenConverter();

    jwtAccessTokenConverter.setSigningKey(CommonConstant.SIGN\_KEY);

    return jwtAccessTokenConverter;

} }

配置完成體驗

1:訪問SSO客戶端的 index.html:
2:重定向到SSO服務端的 Basic 認證:
3:輸入帳號密碼又重定向到原請求的 客戶端index資源服務器

相關文章
相關標籤/搜索