OAuth
OAuth(Open Authorization)는 애플리케이션이 사용자의 비밀번호 없이도 제한된 접근 권한을 얻을 수 있게 해주는 인증 프로토콜입니다.
why
보안: 사용자의 비밀번호를 공유하지 않고도 애플리케이션에 접근할 수 있도록 합니다. 이를 통해 사용자의 계정 정보가 노출되는 것을 방지할 수 있습니다.
편의성: 사용자는 한 번의 인증으로 여러 애플리케이션에 접근할 수 있습니다. 이를 통해 사용자 경험이 향상됩니다.
범위 제한: 애플리케이션은 사용자의 승인을 얻어 필요한 최소한의 권한만 요청할 수 있습니다.
// OAuth2 클라이언트 구성
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
// 이 클래스는 Spring Security 구성을 담당하는 클래스입니다.
// @Configuration 어노테이션을 사용하여 Spring 구성 클래스임을 나타내고,
// @EnableWebSecurity 어노테이션을 사용하여 웹 보안을 활성화합니다.
// WebSecurityConfigurerAdapter 클래스를 상속받아 보안 설정을 커스터마이징합니다.
@Override
protected void configure(HttpSecurity http) throws Exception {
// configure(HttpSecurity) 메서드는 HTTP 보안 설정을 정의합니다.
http
.authorizeRequests()
.antMatchers("/", "/home").permitAll() // "/" 및 "/home" 경로에 대해서는 인증을 허용
.anyRequest().authenticated() // 그 외의 모든 요청에 대해서는 인증이 필요
.and()
.oauth2Login(); // OAuth2 로그인을 활성화합니다.
}
}
// OAuth2 리소스 서버 구성
@Configuration
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
// 이 클래스는 OAuth2 리소스 서버 구성을 담당하는 클래스입니다.
// @Configuration 어노테이션을 사용하여 Spring 구성 클래스임을 나타냅니다.
// ResourceServerConfigurerAdapter 클래스를 상속받아 리소스 서버 설정을 커스터마이징합니다.
@Override
public void configure(HttpSecurity http) throws Exception {
// configure(HttpSecurity) 메서드는 리소스 서버에 대한 HTTP 보안 설정을 정의합니다.
http
.authorizeRequests()
.antMatchers("/api/**").authenticated(); // "/api/**" 경로에 대해서는 인증이 필요
}
}
// OAuth2 리소스 액세스 예시
@RestController
@RequestMapping("/api")
public class ResourceController {
// 이 클래스는 OAuth2 리소스에 대한 REST 컨트롤러입니다.
// @RestController 어노테이션을 사용하여 REST 컨트롤러임을 나타내고,
// @RequestMapping("/api") 어노테이션을 사용하여 "/api" 경로에 매핑됩니다.
@GetMapping("/hello")
public String hello() {
// "/api/hello" 경로에 대한 GET 요청을 처리하는 메서드입니다.
// 이 메서드는 "Hello, OAuth2 user!"라는 문자열을 반환합니다.
return "Hello, OAuth2 user!";
}
}
SecurityConfig 클래스에서는 OAuth2 클라이언트 구성을 담당합니다.
"/" 및 "/home" 경로에 대해서는 인증을 허용하고, 그 외의 모든 요청에 대해서는 인증이 필요하도록 설정합니다.
또한 OAuth2 로그인을 활성화합니다.
ResourceServerConfig 클래스에서는 OAuth2 리소스 서버 구성을 담당합니다.
"/api/**" 경로에 대해서는 인증이 필요하도록 설정합니다.
ResourceController 클래스에서는 OAuth2 리소스에 대한 REST 컨트롤러를 정의합니다.
"/api/hello" 경로에 대한 GET 요청을 처리하며, "Hello, OAuth2 user!"라는 문자열을 반환합니다.