🔐 OAuth2란?

정의

OAuth2는 사용자 비밀번호를 직접 공유하지 않고도, 외부 애플리케이션이 제한된 범위의 권한을 위임받을 수 있게 해주는 인증/인가 표준이다. 주로 소셜 로그인, API 접근 위임, 외부 서비스 연동에서 사용한다.

🎯 사용하는 이유

  • 사용자 비밀번호를 클라이언트에 직접 넘기지 않는다.
  • 서비스 간 권한 위임을 안전하게 처리할 수 있다.
  • 접근 범위를 scope로 세밀하게 제한할 수 있다.
  • 외부 앱이 사용자를 대신해 API를 호출할 수 있다.

포인트

OAuth2는 로그인 자체가 아니라 권한 위임에 더 가깝다.

🧱 주요 구성 요소

  • Resource Owner: 자원의 소유자, 보통 사용자
  • Client: 권한을 요청하는 애플리케이션
  • Authorization Server: 토큰을 발급하는 서버
  • Resource Server: 보호된 자원을 제공하는 서버

🔄 기본 흐름

  1. 사용자가 Client를 통해 권한 요청을 시작한다.
  2. Authorization Server가 사용자 인증과 동의를 받는다.
  3. Authorization Server가 Access Token을 발급한다.
  4. Client가 Access Token을 이용해 Resource Server에 요청한다.
  5. Resource Server가 토큰을 검증하고 자원을 제공한다.

🧩 주요 개념

Access Token

  • API 접근에 사용한다.
  • 비교적 짧은 유효 시간을 가진다.

Refresh Token

  • Access Token 재발급에 사용한다.
  • 보통 더 긴 유효 시간을 가진다.

Scope

  • 토큰이 접근할 수 있는 권한 범위다.
  • 필요한 권한만 부여하는 데 중요하다.

Redirect URI

  • 인증 완료 후 돌아갈 주소다.
  • 미리 등록된 URI만 허용해야 한다.

🛠️ 대표적인 인증 방식

  • Authorization Code
  • Client Credentials
  • Refresh Token
  • Device Code

[!important] 주의 OAuth2 방식마다 적용 대상이 다르다. 사용자 로그인용인지, 서버 간 통신용인지 먼저 구분해야 한다.

⚠️ 주의할 점

  • OAuth2는 인증과 인가가 섞여 보일 수 있지만 본질은 권한 위임이다.
  • Access Token의 만료 시간과 Refresh Token 정책을 분리해서 설계해야 한다.
  • Scope를 너무 넓게 주면 보안 사고로 이어질 수 있다.
  • Redirect URI 검증을 엄격하게 해야 한다.

🔗 JWT와의 관계

  • OAuth2는 권한 위임 흐름을 정의한다.
  • JWT는 토큰의 표현 형식으로 자주 사용된다.
  • 즉, OAuth2와 JWT는 자주 함께 쓰이지만 같은 개념은 아니다.

✅ 활용 예시

  • 소셜 로그인
  • 외부 API 연동
  • 마이크로서비스 권한 위임
  • 모바일 앱 인증 흐름

🧾 정리

OAuth2는 안전하게 권한을 위임하는 표준이다. 비밀번호를 직접 공유하지 않고, 토큰과 범위를 통해 필요한 권한만 주는 것이 핵심이다.


연결문서

댓글남기기