ResourceServer와 AuthorizationServer를 따로 만들어보자...!
1. ResourceServer생성
따로 프로젝트를 생성해서 만들어도 되고 멀티 모듈로 만들어도 된다..
위의 글을 따라서 멀티 모듈 프로젝트를 생성 혹은 변환 할 수 있음!
DBServer -> module-jdbc
ResourceServer -> module-api
AuthorizationServer -> module-oauth2
2. ResourceServer 설정
TokenStore를 AuthorizationServer와 동일하게 JWT로 설정해줬다.
당연히 signingKey도 동일해야 한다.
@EnableResourceServer
@Configuration
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
/* token store로 JWTTokenStore를 사용하겠다 */
@Bean
public TokenStore tokenStore() {
return new JwtTokenStore(jwtAccessTokenConverter());
}
/* JWT 디코딩 하기 위한 설정 */
@Bean
public JwtAccessTokenConverter jwtAccessTokenConverter() {
JwtAccessTokenConverter jwtAccessTokenConverter = new JwtAccessTokenConverter();
jwtAccessTokenConverter.setSigningKey("jwtKey");
return jwtAccessTokenConverter;
}
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/v1/users").access("#oauth2.hasScope('read')")
.anyRequest().authenticated();
}
}
그리고 application.yml에도 시큐리티 설정을 추가한다.
token-info-uri에 설정된 경로로 토큰을 받았을 때 해당 토큰이 유효한지 검증하고, 유효하면 user infomation을 받을 수 있다.
security:
oauth2:
resource:
token-info-uri: http://localhost:8081/oauth/check_token
3. AuthorizationServer 설정
application.yml에 check-token-access값을 isAuthenticated()로 변경한다. (기본 값은 denyAll())
이렇게 설정해주면 /oauth/check_token URI가 활성화 된다고 함!
security:
oauth2:
authorization:
check-token-access: isAuthenticated()
4. 테스트
4-1. 토큰 발급
현재 8081포트가 AuthorizationServer(module-oauth2)이다.
/oauth/token URI로 토큰을 발급받는다.
4-2. API 요청
/v1/users URI로 요청을 해볼건데, 위에 ResourceServer설정을 보면
/v1/users경로는 scope가 read일 때만 접근가능하도록 설정되어 있다.
@RestController
@RequestMapping(value = "/v1")
public class UserController {
private UserService userService;
@GetMapping("/users")
public String findAllUser() {
return "Success!!";
}
}
Authorization Type은 Bearer Token으로 설정하고, Token값에 위에서 발급받은 access_token을 담는다!
응답이 제대로 잘 왔다^-^
'STUDY > Spring' 카테고리의 다른 글
Spring Boot | Spring Security OAuth2 (7) 토큰과 함께 다른 정보 응답 (0) | 2021.03.12 |
---|---|
Spring Boot | Spring Security OAuth2 (6) JWT KeyPair (0) | 2021.03.11 |
Spring Boot | 멀티 모듈 프로젝트 (Multi Module) (0) | 2021.03.10 |
Spring Boot | Spring Security OAuth2 (4) JWT TokenStore (0) | 2021.03.09 |
Spring Boot | Spring Security OAuth2 (3) JDBC방식으로 바꾸기 (0) | 2021.03.09 |