OAuth(Open Authorization)는 제3자 애플리케이션이 사용자의 인증 정보를 직접 다루지 않고 안전하게 리소스에 접근할 수 있도록 하는 인증 프레임워크다.
JWT(JSON Web Token)는 서버와 클라이언트 간 정보를 안전하게 전달하기 위한 토큰 기반 인증 방식이다.
| 비교 항목 | OAuth 2.0 | JWT |
|---|---|---|
| 개념 | 인증 및 권한 부여를 위한 프레임워크 | 인증 및 데이터 교환을 위한 토큰 |
| 주요 목적 | 제3자 서비스가 사용자 대신 리소스 접근 | 서버와 클라이언트 간 인증 및 데이터 전달 |
| 토큰 사용 | Access Token, Refresh Token 사용 | Access Token 자체가 JWT로 구성됨 |
| 저장 방식 | 보통 데이터베이스 or 메모리 저장 | Stateless (서버에 저장 불필요) |
| 보안 | Access Token 유출 시 보안 위협 존재 | 서명(Signature)로 무결성 보장 |
| 사용 사례 | 소셜 로그인, API 권한 관리 | REST API 인증, 마이크로서비스 인증 |
OAuth는 인증 프로토콜이고, JWT는 토큰의 한 종류이다.
OAuth 2.0에서 Access Token을 JWT로 발급할 수 있다. 이를 통해 서버는 토큰을 검증하고 사용자 권한을 확인할 수 있다.
1) OAuth가 적합한 경우:
2) JWT가 적합한 경우:
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.oauth2Login()
.userInfoEndpoint()
.userService(customOAuth2UserService);
}
}
public class JwtTokenProvider {
private String secretKey = "mySecretKey";
public String generateToken(String username) {
return Jwts.builder()
.setSubject(username)
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + 3600000))
.signWith(SignatureAlgorithm.HS256, secretKey)
.compact();
}
}
OAuth와 JWT는 인증과 권한 관리에서 매우 중요한 기술이다.
앞으로 OAuth와 JWT를 활용한 인증 시스템을 설계할 때 어떤 방식을 선택해야 할지 명확하게 이해하고 적용해야겠다.