Spring cloud oauth 2 인증 자원 센터 를 어떻게 구축 합 니까?

인증 센터 구축
의존 도 를 추가 합 니 다.spring cloud 를 사용 하면 어떤 서비스 든 이 봉 인 된 의존 만 있 으 면 됩 니 다.

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-oauth2</artifactId>
    </dependency>
spring 보안 설정

/**
 * security   
 */
@Configuration
@EnableWebSecurity //  web  
@EnableGlobalMethodSecurity(prePostEnabled = true) //           
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
  @Qualifier("userDetailsServiceImpl")
  @Autowired
  private UserDetailsService userDetailsService;

  //        ,       
  @Override
  protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(userDetailsService)//  userDetailsService         
        .passwordEncoder(passwordEncoder()); //       
  }
  @Bean
  public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
  }
  //        ,      ,        
  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
        //          
        .anyRequest().permitAll()
        .and().httpBasic(); //  http    
  }

  //   token     Bean
  @Override
  @Bean
  public AuthenticationManager authenticationManagerBean() throws Exception {
    return super.authenticationManagerBean();
  }
}
OAuth 2 인증 센터 설정

/**
 * OAuth2     
 */
@EnableAuthorizationServer //  OAuth2    
@Configuration
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
  @Autowired
  @Qualifier("authenticationManagerBean")
  private AuthenticationManager authenticationManager;
  @Autowired
  private DataSource dataSource;
  @Autowired
  private UserDetailsService userDetailsService;
  @Autowired
  private PasswordEncoder passwordEncoder;
  /**
   *                        ,         ,           ,    ,                
   */
  @Override
  public void configure(ClientDetailsServiceConfigurer clients) throws Exception{
        clients.inMemory()
        .withClient("hou") //    id,   
        .secret(passwordEncoder.encode("123456")) //      
            .scopes("server")
        .authorizedGrantTypes("authorization_code", "password", "refresh_token") //    
        .redirectUris("http://www.baidu.com");
        /*redirectUris        ,   OAuth2   ,          ,          */
     //     ,    
//    clients.withClientDetails(clientDetailsService());
//    clients.jdbc(dataSource);
  }
  //    ClientDetails  
  private ClientDetailsService clientDetailsService() {
    return new JdbcClientDetailsService(dataSource);
  }

  /**
   *   token    
   */
  @Override
  public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
    endpoints.authenticationManager(authenticationManager)
        .tokenStore(tokenStore())
        .userDetailsService(userDetailsService);
  }
  //  token    
  @Bean
  public TokenStore tokenStore() {
    //return new JdbcTokenStore(dataSource); //  mysql 
    return new InMemoryTokenStore();  //     
    //new RedisTokenStore(connectionFactory); //  redis 
  }

  //    token       
  @Override
  public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
    oauthServer.tokenKeyAccess("permitAll()") //  token       
        .checkTokenAccess("isAuthenticated()") //      token  
        .allowFormAuthenticationForClients();  //         client_id client_secret  token
  }
}
2 테스트 토 큰 획득
기본적으로 token 인터페이스 그림 에서 2 를 가 져 옵 니 다.여기 서 설명 하 겠 습 니 다.인자 key 는 빈 칸 이 있어 서 는 안 됩 니 다.특히 client이 두 개

3.보호 가 필요 한 자원 서비스 설정
yml 설정 클 라 이언 트 정보 및 센터 주소

security:
 oauth2:
  resource:
   tokenInfoUri: http://localhost:9099/oauth/check_token
   preferTokenInfo: true
  client:
   client-id: hou
   client-secret: 123456
   grant-type: password
   scope: server
   access-token-uri: http://localhost:9099/oauth/token
인증 센터 주 소 를 설정 하면 됩 니 다.

/**
 *       
 */
@Configuration
@EnableResourceServer //       ,    token    
@EnableGlobalMethodSecurity(prePostEnabled = true) //         
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {

  @Override
  public void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
        //           ,          
        .anyRequest().permitAll();
  }
}
작성 권한 제어

@RestController
@RequestMapping("test")
public class TestController {
  //     
  @GetMapping("/hou")
  public String test01(){
    return "      hou";
  }
  @PreAuthorize("hasAnyAuthority('ROLE_USER')") //    
  @GetMapping("/zheng")
  public String test02(){
    return "      zheng";
  }
}
4 테스트 권한
token 사용 안 함

token 사용 하기

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기