컴퓨터 사이언스/보안

[OAuth] 로그인 없이 로그인하기

Dachaes 2025. 4. 12. 18:04
728x90
반응형

OAuth (Open Authorization) 

현대 웹서비스에서 흔히 볼 수 있는 Google로 로그인, Kakao로 시작하기 같은 기능은 어떻게 작동할까요? 바로 이럴 때 사용하는 기술이 OAuth(Open Authorization)입니다. 이 글에서는 OAuth가 무엇인지, 왜 필요하며, 어떻게 동작하는지를 쉽고 명확하게 설명합니다. OAuth는 현재 대부분 OAuth 2.0 버전을 의미하며, 이 글에서도 OAuth 2.0 기준으로 설명합니다.

 


1.  OAuth란?

OAuth는 Open Authorization의 약자로, 타사 애플리케이션이 사용자의 비밀번호를 알지 않고도 자원에 접근할 수 있게 해주는 권한 위임 프로토콜입니다.

예를 들어 어떤 웹사이트가 사용자의 구글 드라이브에서 파일을 가져오고 싶어 한다고 해보죠. OAuth를 이용하면, 사용자는 자신의 Google 계정 정보를 직접 웹사이트에 주지 않고도 해당 웹사이트에 접근 권한만 위임할 수 있습니다.

 


2.  왜 OAuth가 필요할까?

전통적인 방식이라면, 사용자가 웹사이트에 자신의 ID와 비밀번호를 입력해야 했습니다. 이 방식은 보안상 매우 위험하죠.

OAuth가 필요한 이유

문제점 OAuth의 해결 방식
타사에게 내 비밀번호를 넘겨줘야 함 비밀번호 없이 토큰으로 권한 위임
언제 어떤 앱이 내 정보를 가져가는지 모름 범위(scope)와 시간 제한으로 통제 가능
인증과 권한 위임의 구분이 불명확 인증(Login)은 OpenID Connect, 권한 위임은 OAuth로 명확 분리

 


3.  OAuth의 등장인물

OAuth 흐름에는 다음과 같은 주체들이 등장합니다.

  • 리소스 소유자 (Resource Owner) : 보통 사용자
  • 클라이언트 (Client) : 권한을 얻으려는 앱이나 서비스
  • 리소스 서버 (Resource Server) : 보호된 데이터를 가지고 있는 서버 (예: Google API)
  • 인증 서버 (Authorization Server) : 액세스 토큰을 발급하는 서버

 


4.  OAuth의 동작 방식과 HTTP 요청 흐름 (Authorization Code Flow 기준)

OAuth는 HTTP 프로토콜을 기반으로 동작하는 권한 위임 프로토콜입니다. 사용자가 직접 비밀번호를 제공하지 않고도, 외부 애플리케이션(클라이언트)이 제한된 리소스에 접근할 수 있도록 허용합니다.
가장 대표적인 방식은 Authorization Code Flow이며, 다음과 같은 절차를 따릅니다.

동작 흐름

  1. 사용자 요청 시작
    • 사용자가 앱에서 “Google로 로그인” 버튼을 클릭합니다.
  2. 권한 요청 (HTTP GET)
    • 클라이언트는 사용자 브라우저를 인증 서버의 "/authorize" 엔드포인트로 리디렉션하여 권한을 요청합니다.
  3. 사용자 동의 및 로그인
    • 사용자는 로그인 후, 앱이 요청한 권한(scope)에 대해 동의합니다.
  4. Authorization Code 발급 (HTTP 리디렉션)
    • 인증 서버는 사용자의 동의를 확인한 뒤, "redirect_uri"를 통해 일회용 인증 코드를 클라이언트로 전달합니다.
  5. Access Token 요청 (HTTP POST)
    • 클라이언트는 서버 측에서 인증 코드를 포함한 POST 요청을 "/token" 엔드포인트로 보내고, 액세스 토큰을 요청합니다.
  6. Access Token 발급
    • 인증 서버는 Access Token(필요 시 Refresh Token 포함)을 클라이언트에 발급합니다.
  7. API 요청 (Authorization 헤더)
    • 클라이언트는 Access Token을 HTTP 요청의 "Authorization" 헤더에 담아, 리소스 서버의 API를 호출합니다.

이 전체 과정은 HTTP GET, POST 요청, Authorization 헤더, redirect_uri, 상태 코드 등의 기존 HTTP 구조 위에서 이루어지며, 별도의 전송 프로토콜을 사용하지 않습니다.

 


5.  OAuth에서 자주 쓰이는 용어 정리

용어 설명
Access Token API에 접근할 수 있는 권한 증명
Refresh Token Access Token이 만료되었을 때 갱신할 수 있는 토큰
Scope 어떤 권한(읽기/쓰기 등)을 요청할 것인지 범위를 지정
Redirect URI 인증 후 사용자를 다시 보낼 URI, 보안상 엄격하게 검사됨
Grant Type 권한 요청 방식 (예: authorization_code, implicit, client_credentials 등)

 


6.  OAuth와 인증은 다르다?

네! OAuth의 핵심은 권한 위임(Authorization)을 위한 프로토콜입니다.
사용자를 로그인시키는 인증(Authentication)이 주 목적이라면, OAuth 위에 구축된 OpenID Connect(OIDC)가 사용됩니다. 하지만 이게 사용자 로그인을 처리하는 인증(Authentication)처럼 보일 수 있기 때문에 혼동이 생깁니다.

  • OAuth : "이 앱이 내 Google Drive를 읽게 해도 돼"
  • OIDC : "이 앱이 나라는 걸 인증해도 돼 (로그인)"

 


7.  마무리

  • OAuth는 타사 앱이 비밀번호 없이 제한된 접근 권한을 가질 수 있게 해주는 권한 위임 프로토콜입니다.
  • Authorization Code Flow는 보안이 강화된 표준 방식입니다.
  • 인증(Authentication)과 권한 위임(Authorization)을 구분해야 합니다.

함께 보면 좋은 자료

블로그 글 :

 

[OAuth] 로그인 기술이 아니다? OAuth와 인증의 관계 정리

OAuth (Open Authorization) “구글 로그인은 OAuth 기술로 구현되니까, OAuth는 로그인 인증 프로토콜이다?” 많은 개발자들이 이렇게 오해합니다.하지만 진실은 조금 다릅니다. OAuth는 로그인(Authenticatio

dachaes-devlogs.tistory.com

 

 

[OpenID Connect] OAuth로는 부족했던 인증을 해결하다.

OpenID Connect (OIDC) OAuth는 인가(Authorization)를 위한 프로토콜이지, 사용자의 신원 확인(로그인) 기능은 없었습니다. 그 공백을 채우기 위해 등장한 것이 바로 OpenID Connect (OIDC)입니다.이 글에서는 OIDC

dachaes-devlogs.tistory.com

 


728x90
반응형