3. 웹 인증 및 보안 기초
1. OAuth란?
OAuth: Open Authorization
"이미 사용자 정보를 가지고있는 서비스가 다른 서비스에서의 사용자의 인증을 대신해 주는 방법"
OAuth 2.0은 제3자 애플리케이션(클라이언트)이 리소스 소유자(사용자)를 대신하여 서비스 제공자(예: Google, Facebook 등)의 보호된 자원에 접근할 수 있도록 권한을 위임받는 표준 프로토콜이다.
주된 목적은 비밀번호 공유 없이 자원 접근을 허용하는 것이다.
2. OAuth 2.0의 구성 요소
구성 요소 | 설명 |
Resource Owner | 자원 소유자, 즉 사용자 |
Client | 사용자 자원에 접근하려는 제3자 애플리케이션 |
Authorization Server | 인증 및 권한 부여를 담당하는 서버 (Access Token 발급) |
Resource Server | 보호된 자원이 있는 서버 (Access Token으로 접근 허용) |
3. OAuth 2.0의 흐름
① 사이트 접속
Resource Owner(사용자)가 ‘마늘마켓’(클라이언트 앱)에 접속
② 인증 요청
마늘마켓은 사용자가 로그인하려고 하면 Authorization Server(구글, 카카오, 네이버 등)에 인증 요청을 보냄
③ 인증 확인
사용자는 인증 서버(구글 등)에 로그인하고, 해당 애플리케이션이 권한을 요청하는 범위를 보고 동의 여부를 확인
④ Authorization Code 발급
인증이 완료되면 Authorization Server는 마늘마켓에게 Authorization Code를 리다이렉트 URI를 통해 전달
⑤ Authorization Code 전달
마늘마켓은 전달받은 인가 코드를 다시 Authorization Server에 Access Token을 요청하기 위한 용도로 전송
⑥ Code 확인
Authorization Server는 이 코드가 유효한지를 확인합니다.
⑦ Access Token 발급
유효한 코드라면, Authorization Server는 마늘마켓에게 Access Token을 발급
⑧ Access Token 사용
마늘마켓은 이 토큰을 Resource Server에 전달하여 보호된 사용자 정보 요청을 보냄
⑨ Token 확인
Resource Server는 전달받은 토큰이 유효한지를 Authorization Server에 확인하거나 자체적으로 검증함
⑩ 사용자 정보 응답
토큰이 유효하다면, Resource Server는 사용자의 개인정보 또는 리소스를 마늘마켓에 전달
클라이언트-서버로 나눠서 흐름 보기
클라이언트(Client)의 흐름
① 사이트 접속
사용자인 Resource Owner(곰돌이)가 마늘마켓 웹사이트(클라이언트)에 접속
② 인증 요청
사용자가 "네이버로 로그인" 등 소셜 로그인 버튼을 클릭하면, 클라이언트는 Authorization Server(예: 네이버, 카카오, 구글)로 인증을 요청
③ 사용자 동의
인증 서버는 사용자에게 로그인 창과 함께, 권한 요청(프로필 정보 제공 등)에 대한 동의를 받음
④ Authorization Code 발급
사용자가 동의하면, 인증 서버는 일회성 Authorization Code를 클라이언트에게 전달
⑤ 클라이언트 → 서버로 Code 전달
클라이언트는 받은 Authorization Code를 자체 서버(마늘마켓 서버)로 전송
서버(Server)의 흐름
⑥ Authorization Code → Access Token 요청
마늘마켓 서버는 받은 Authorization Code를 가지고 다시 인증 서버에 접속하여 Access Token 발급을 요청
⑦ 인증 서버에서 Code 확인
인증 서버는 전달받은 Authorization Code의 유효성을 검증
⑧ Access Token 발급
인증 서버는 유효성 검증에 성공하면 마늘마켓 서버에 Access Token을 발급
⑨ Access Token → 사용자 정보 요청
마늘마켓 서버는 Access Token을 가지고 리소스 서버(구글, 카카오 등)에 사용자 정보를 요청
⑩ Token 확인
리소스 서버는 Access Token이 유효한지 검증
①① 사용자 정보 전달
리소스 서버는 사용자 프로필 정보(이메일, 이름 등)를 마늘마켓 서버에 응답
①② 사용자 정보 → 클라이언트 전달
마늘마켓 서버는 받은 사용자 정보를 클라이언트에 전달, 이후 로그인 완료 처리
4. 인가코드(Authorization Code)란 무엇인가요?
- 인가코드는 클라이언트가 사용자 대신 Access Token을 받기 위해 사용하는 임시 코드이다.
- 보안상 민감한 정보를 Access Token에 직접 포함하지 않고, 인가코드를 통해 두 단계 인증 흐름을 구현한다.
- 브라우저를 통한 사용자 인증 완료 후, 클라이언트에 전달된다.
- 일반적으로 짧은 유효 기간을 가진다(수 분 내).
Access Token은 서버-서버 통신에서만 주고받기 때문에, 인가코드를 거치면 보안성이 높아진다.