웹 서비스 개발 – OAuth 인증 – 1 – OAuth 인증 프로토콜

웹 서비스 개발 - OAuth 인증 - 1 - OAuth 인증 프로토콜
웹 서비스 개발 – OAuth 인증 – 1 – OAuth 인증 프로토콜

웹 서비스 개발 – OAuth 인증 – OAuth 개념과 원리

안녕하세요! 😄
오늘은 많은 웹 서비스에서 빠질 수 없는 기술, 바로 OAuth(오스) 인증에 대해 소개해드릴게요.
“이름은 많이 들어봤는데, 정확히 뭐 하는 기술인지 모르겠어요” 하셨던 분들!
이 글 하나면 OAuth가 어떻게 동작하는지, 왜 필요한지 완전 정리됩니다! 🧠✨


1. OAuth란 무엇인가요?

OAuth는 Open Authorization의 줄임말로,
사용자의 비밀번호를 직접 넘기지 않고도
다른 서비스가 사용자의 데이터를 안전하게 접근할 수 있도록 도와주는 표준 인증 방식이에요!

예를 들어 페이스북 계정으로 로그인하면, 비밀번호를 입력하지 않아도
내 정보에 접근해서 로그인이나 회원가입이 되죠?
바로 이게 OAuth 덕분이에요!


2. 왜 OAuth가 필요한가요?

✅ 전통적인 방식의 문제점

과거에는 외부 서비스가 사용자 정보를 필요로 할 때
ID와 비밀번호를 직접 입력받아 로그인을 대신해줬어요.
하지만 이런 방식은 매우 위험하죠! 😨

  • 사용자 비밀번호가 노출될 수 있고,
  • 앱이 모든 정보에 접근하게 되며,
  • 보안 사고 발생 시 책임 소재가 불분명해져요.

✅ OAuth 방식의 장점

  • 비밀번호는 절대 공개되지 않아요!
  • 사용자가 명시적으로 허용한 권한만 부여돼요.
  • 서비스 간 역할과 책임이 명확해요.

🛡️ 즉, **“내 데이터는 내가 통제한다”**는 개념을 실현한 보안 방식이에요.


3. OAuth가 사용되는 예시

  • 카카오, 네이버, 구글, 애플 로그인
  • 페이스북 계정으로 앱 접속
  • 슬랙 봇이 메시지를 읽고 보내는 기능
  • 서드파티 앱이 내 깃허브 저장소를 관리

👉 이런 사례들 전부 OAuth 기반이에요!


4. OAuth 인증의 흐름 구조

OAuth의 핵심은 토큰을 발급받아 권한을 위임하는 구조예요.
흐름을 한 단계씩 살펴볼게요!

① Resource Owner (자원 소유자)

  • 일반 사용자(=우리)!

② Client (클라이언트 앱)

  • 사용자의 데이터를 이용하려는 외부 서비스 또는 앱

③ Authorization Server (인가 서버)

  • 사용자 인증을 처리하고, 권한을 부여하는 서버

④ Resource Server (리소스 서버)

  • 실제 사용자 데이터를 갖고 있는 서버

5. OAuth의 기본 동작 원리 (Authorization Code Grant 예시)

아래는 가장 일반적인 OAuth 방식인 Authorization Code Grant 흐름입니다:

  1. 사용자 로그인 요청

    • 사용자가 외부 앱(Client)에서 구글 로그인 버튼을 클릭
  2. 인가 코드 요청

    • 클라이언트는 인가 서버에 “이 사용자 정보 좀 줄래요?”라고 요청해요
    • 브라우저는 사용자에게 “이 앱이 당신 정보를 요청합니다. 허용하시겠어요?”라고 묻죠
  3. 사용자 승인

    • 사용자가 허용을 클릭하면, 인가 서버는 브라우저를 다시 클라이언트로 리다이렉트하면서 **Authorization Code(인가 코드)**를 함께 전달해요
  4. 토큰 발급 요청

    • 클라이언트는 받은 인가 코드를 들고, 인가 서버에게 “이 코드로 접근 토큰 주세요!”라고 요청
  5. Access Token(액세스 토큰) 발급

    • 인가 서버는 클라이언트에게 Access Token을 발급합니다
  6. API 요청 시 토큰 사용

    • 클라이언트는 이 Access Token을 이용해 사용자 데이터를 가져와요!

🎯 즉, 비밀번호는 전혀 공개하지 않고도
사용자가 동의한 범위 안에서 정보에 접근할 수 있게 해주는 거죠!


6. OAuth의 주요 토큰 종류

토큰 종류 설명
Access Token 사용자 정보에 접근할 수 있는 열쇠
Refresh Token Access Token이 만료되었을 때 새로 발급받기 위한 열쇠
Authorization Code Access Token을 받기 위한 1회용 코드

7. OAuth 인증 방식 종류

인증 방식 설명
Authorization Code Grant 가장 일반적. 보안 우수. 서버 간 통신에 적합
Implicit Grant 클라이언트 측에서 토큰 받기. 보안상 잘 안 씀
Client Credentials Grant 사용자가 아닌 앱 자체 인증. 서버 간 통신용
Resource Owner Password Credentials Grant 비밀번호 직접 입력. OAuth 철학과 안 맞음

8. OAuth는 어떻게 안전할까요?

  • HTTPS를 기본 전제로 사용하여 중간 탈취 방지
  • **Access Token에는 사용 범위(scope)**가 명확히 정의돼 있어요
  • 사용자 동의를 반드시 거쳐야 접근 가능
  • Refresh Token은 따로 보호되고, 노출되면 바로 차단 가능

9. OAuth를 사용할 때 주의할 점 ✅

항목 주의사항
URL에 토큰 포함 금지 토큰은 절대 GET 파라미터로 보내면 안돼요
HTTPS 필수 모든 OAuth 통신은 HTTPS를 통해 이루어져야 해요
토큰 저장 위치 토큰은 브라우저 LocalStorage보단 HttpOnly 쿠키 추천
사용자 동의 범위 제한 과도한 권한 요청은 사용자 거부율을 높여요
토큰 만료 및 갱신 처리 Refresh Token을 활용한 갱신 로직 구현 필요

마무리하며 😊

OAuth는 현대 웹 서비스의 로그인과 데이터 접근을 안전하게 만들어주는 든든한 보안 수호자예요!
단순히 로그인 수단이 아니라,
사용자 권한에 대한 철저한 통제 시스템이기 때문에 더욱 중요하죠.

앞으로 OAuth는 다양한 API 연동이나 소셜 로그인 구현 시 필수가 될 거예요.
다음 시간에는 실전에서 OAuth를 어떻게 구현하는지 자세히 알려드릴게요!

오늘도 읽어주셔서 감사합니다! 🙌
궁금한 점 있으면 언제든지 댓글로 남겨주세요 💬

답글 남기기