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 사용 하기
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.