25.03.20 TIL OAuth vs JWT 비교

신성훈·2025년 3월 20일
0

TIL

목록 보기
152/162

1. OAuth와 JWT 개요

- OAuth란?

OAuth(Open Authorization)는 제3자 애플리케이션이 사용자의 인증 정보를 직접 다루지 않고 안전하게 리소스에 접근할 수 있도록 하는 인증 프레임워크다.

  • 주로 소셜 로그인(Google, Facebook 로그인) 등에 사용됨
  • Access Token을 활용하여 권한을 검증함
  • OAuth 2.0이 가장 널리 사용됨

- JWT란?

JWT(JSON Web Token)는 서버와 클라이언트 간 정보를 안전하게 전달하기 위한 토큰 기반 인증 방식이다.

  • 토큰 기반의 인증 및 정보 전달에 사용됨
  • Header.Payload.Signature 구조로 구성됨
  • 서버가 상태를 유지하지 않는 Stateless 인증을 가능하게 함

2. OAuth와 JWT의 차이점

비교 항목OAuth 2.0JWT
개념인증 및 권한 부여를 위한 프레임워크인증 및 데이터 교환을 위한 토큰
주요 목적제3자 서비스가 사용자 대신 리소스 접근서버와 클라이언트 간 인증 및 데이터 전달
토큰 사용Access Token, Refresh Token 사용Access Token 자체가 JWT로 구성됨
저장 방식보통 데이터베이스 or 메모리 저장Stateless (서버에 저장 불필요)
보안Access Token 유출 시 보안 위협 존재서명(Signature)로 무결성 보장
사용 사례소셜 로그인, API 권한 관리REST API 인증, 마이크로서비스 인증

3. OAuth와 JWT의 관계

OAuth는 인증 프로토콜이고, JWT는 토큰의 한 종류이다.

OAuth 2.0에서 Access Token을 JWT로 발급할 수 있다. 이를 통해 서버는 토큰을 검증하고 사용자 권한을 확인할 수 있다.


4. OAuth와 JWT의 사용

1) OAuth가 적합한 경우:

  • 제3자 서비스가 리소스에 접근해야 할 때 (예: 소셜 로그인 - 구글, 카카오, 페이스북 등등)
  • Access Token과 Refresh Token을 활용하여 보안성을 높여야 할 때
  • 마이크로서비스 간 인증이 필요할 때

2) JWT가 적합한 경우:

  • Stateless 인증이 필요한 경우 (세션 관리 없이 인증 유지)
  • API 간 데이터 교환 시 보안성을 강화할 때
  • 사용자의 인증 상태를 빠르게 확인해야 할 때

5. Spring Security에서 OAuth + JWT 사용 예시

1. OAuth를 활용한 인증 (Spring Security + OAuth2.0)

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.oauth2Login()
            .userInfoEndpoint()
            .userService(customOAuth2UserService);
    }
}

2. JWT를 활용한 인증 (Spring Security + JWT)

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();
    }
}

6. 마무리

OAuth와 JWT는 인증과 권한 관리에서 매우 중요한 기술이다.

  • OAuth는 인증 및 권한 부여에 강점이 있고 JWT는 인증을 Stateless하게 처리할 수 있는 장점이 있다.
  • 실무에서는 OAuth 2.0에서 JWT를 Access Token으로 사용하는 방식이 일반적이다.
  • 상황에 맞게 OAuth와 JWT를 적절히 조합하여 보안성과 효율성을 극대화하는 것이 중요하다.

앞으로 OAuth와 JWT를 활용한 인증 시스템을 설계할 때 어떤 방식을 선택해야 할지 명확하게 이해하고 적용해야겠다.

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글