R+7
[TIL] 차근차근 CS (9) - Auth와 OAuth 본문

Today I Learned
인증(Authentication)과 인가(Authorization)
개발에서 'Auth'는 철자가 비슷한 인증(Authentication)과 인가(Authorization) 두 가지 개념을 통칭. 시스템 보안을 구성하는 가장 기초적인 두 축이다. 인증은 '사용자가 누구인지 증명하고 확인하는 절차'고, 인가는 그 인증된 사용자가 '특정 자원에 접근, 조작 가능한지 검증하는 절차'다. 쉽게 말하면 "너 누구..?"랑 "너 뭐 돼?"다.
인증은 항상 먼저 진행되고, 인가는 인증이 완료된 후 진행된다. 실패 시 HTTP 상태 코드는 각각 401 Unauthorized (미인증 상태)와 403 Forbidden (인증은 되었으나 권한 없음)이다.
OAuth(Open Authorization)
OAuth는 사용자가 자신의 비밀번호를 직접 제공하지 않고도 외부 애플리케이션(클라이언트)이 사용자를 대신해 특정 서비스(구글, 카카오, 네이버 등)에 저장된 데이터나 기능에 안전하게 접근할 수 있도록 허용하는 표준 인가 프로토콜이다.
과거 특정 앱에서 사용자의 구글 캘린더 일정을 불러오려면 사용자가 해당 앱에 직접 구글 아이디와 비밀번호를 알려줘야 했다. 매우 위험한 방식. 다만 OAuth는 사용자 비밀번호를 외부 앱에 절대 공유하지 않는다. 대신 인증 서버(구글 등)가 사용자에게 동의를 받은 후 외부 앱에 제한된 권한만 가진 액세스 토큰(Access Token)을 발급해 준다.
핵심 구성 요소
- Resource Owner (자원 소유자): 사용자 본인
- Client (클라이언트): 제3자 애플리케이션 (개발 중인 웹/앱 서비스)
- Authorization Server (인증 서버): 사용자 신원을 확인하고 동의를 받아 클라이언트에게 토큰을 발급해 주는 서버 (예: 구글 로그인 서버)
- Resource Server (자원 서버): 사용자의 실제 데이터가 저장되어 있고, 토큰을 검증해 데이터를 제공하는 API 서버. (예: 구글 캘린더 API 서버)
동작 핵심 원리
- 사용자가 우리 서비스(Client)에서 '구글로 로그인하기' 버튼 클릭
- 구글(Authorization Server)로 이동해 로그인 → "이 앱이 귀하 프로필 정보에 접근하도록 허용하시겠습니까?" 동의 창 승인
- 구글이 우리 서비스 서버로 임시 암호인 '인가 코드' 전달.
- 우리 서비스의 서버가 이 인가 코드를 구글 인증 서버로 보내고, 실제 통신에 쓸 AccessToken과 RefreshToken을 발급
- 발급받은 AccessToken을 활용해 구글 자원 서버에서 사용자의 기본 정보(이메일, 이름)를 가져와 우리 서비스의 회원으로 인증을 완료
※ RefreshToken은 보안상 유효기간이 짧을 수 밖에 없는 AccessToken을 사용자가 일일이 다시 로그인할 필요 없이, 백그라운드에서 조용히 새로 재발급해주는 토큰. 오직 새로운 AccessToken 발급용으로만 쓰이며 (인증 API) AccessToken의 수명을 15분 정도로 설정하더라도 2주~1달 정도 수명을 가진 RefreshToken이 존재하기 때문에 사용자는 로그아웃을 겪지 않음. 그 기간 동안은 만료되더라도 조용히 재발급을 해준다.
Today I Listened to
'TIL' 카테고리의 다른 글
| [TIL] 차근차근 CS (10) - Cookie, HttpOnly, LocalStorage (0) | 2026.07.27 |
|---|---|
| [TIL] 차근차근 Java (1) - Java와 Spring (0) | 2026.07.23 |
| [TIL] 차근차근 CS (7) - 웹소켓 (0) | 2026.07.16 |
| [TIL] 차근차근 CS (6) - 흐름 제어 기법 (0) | 2026.07.15 |
| [TIL] 차근차근 데이터 (2) - 낙관적 락과 비관적 락 (0) | 2026.07.14 |