Contents
흐름도OAuth 2.0의 중요한 개념 중 하나는 **사용자 인증을 클라이언트 서버가 직접 처리하지 않고, 리소스 서버(카카오 서버와 같은 외부 서버)**가 대신 해준다는 것입니다. OAuth에서 클라이언트 서버는 사용자의 자격 증명(아이디와 비밀번호)을 직접 처리하지 않고, 대신 리소스 서버에서 사용자 인증을 처리한 후 인가 코드(Authorization Code) 또는 액세스 토큰을 통해 사용자 정보에 접근할 수 있게 됩니다.
1. OAuth에서의 역할 분담
- 리소스 서버(카카오 서버): 사용자 인증을 담당하고, 사용자가 로그인에 성공하면 인가 코드 또는 액세스 토큰을 발급합니다. 사용자 인증은 여기서 이루어집니다.
- 클라이언트 서버(애플리케이션): 리소스 서버에서 받은 인가 코드 또는 액세스 토큰을 사용해 사용자 정보를 가져오는 역할을 합니다. 사용자의 아이디나 비밀번호를 처리하지 않으며, 오직 액세스 토큰을 통해 인증된 사용자 데이터를 요청합니다.
- 사용자: 클라이언트 서버(애플리케이션)를 이용해 카카오 로그인 등의 방법으로 리소스 서버에 인증을 요청합니다.
2. OAuth의 핵심 개념: 대리 인증
- 사용자는 클라이언트 서버(웹사이트나 애플리케이션)에 로그인하려고 할 때, 클라이언트 서버가 사용자 인증을 처리하지 않습니다.
- 대신, **리소스 서버(카카오 서버 등)**가 사용자의 인증을 대신 처리합니다.
- 즉, OAuth 2.0에서 리소스 서버는 대리 인증자 역할을 하며, 클라이언트 서버는 인증이 완료된 사용자에 대한 정보를 리소스 서버를 통해 안전하게 받아올 수 있습니다.
3. OAuth의 장점
- 보안 강화: 클라이언트 서버가 사용자의 자격 증명(아이디와 비밀번호)을 다루지 않으므로, 사용자 정보 유출의 위험을 줄일 수 있습니다. 대신, 신뢰할 수 있는 리소스 서버(카카오와 같은 외부 서비스)가 인증을 처리합니다.
- 중앙화된 인증: 여러 애플리케이션이나 웹사이트에서 OAuth를 통해 카카오 로그인과 같은 중앙화된 인증 시스템을 사용할 수 있습니다. 사용자는 다양한 서비스에 동일한 OAuth 리소스 서버(카카오, 구글 등)를 통해 쉽게 로그인할 수 있습니다.
- 권한 위임: 사용자는 OAuth를 통해 클라이언트 서버에게 리소스 서버에서 일정한 데이터를 접근할 권한만을 위임할 수 있습니다. 예를 들어, 사용자가 자신의 프로필 정보에만 접근을 허용할 수 있습니다.
흐름도

1. 사용자가 클라이언트에서 "카카오로 로그인" 버튼 클릭
- 사용자가 클라이언트(웹사이트나 앱)에서 "카카오로 로그인" 버튼을 클릭하면, 클라이언트는 카카오 인증 페이지로 사용자를 리디렉션합니다.
- 이 리디렉션은 일반적으로 카카오 API의 인가 엔드포인트로 진행되며, 여기에는 클라이언트 ID와 리디렉션 URI 등이 포함되어 있습니다.
2. 카카오 인증 페이지에서 사용자 로그인
- 사용자가 카카오 로그인 페이지에서 자신의 아이디와 비밀번호를 입력한 후, "로그인" 버튼을 누릅니다.
- 이때 카카오는 HTTPS를 사용하여 비대칭 암호화와 대칭 암호화로 사용자의 인증 정보를 보호합니다. 비대칭 암호화는 클라이언트-서버 간 데이터 송수신의 안전성을 보장하고, 대칭 암호화는 내부 데이터 처리에서 사용됩니다.
3. 카카오 서버가 사용자의 인증 정보를 확인
- 카카오 서버는 사용자가 입력한 아이디와 비밀번호가 정확한지 확인합니다.
- 인증이 성공하면, 카카오는 **인가 코드(Authorization Code)**를 클라이언트 서버에 보냅니다. 이 인가 코드는 일종의 임시 키로, 클라이언트가 이 코드를 사용해 카카오로부터 추가 권한을 요청할 수 있습니다.
4. 클라이언트 서버가 인가 코드를 받아 액세스 토큰 요청
- 인가 코드를 받은 클라이언트 서버는 이를 이용해 카카오에 **액세스 토큰(Access Token)**을 요청합니다. 이때 클라이언트 서버는 등록된 **클라이언트 시크릿(Client Secret)**과 같은 정보를 포함하여 카카오 서버에 요청을 보냅니다.
- 카카오는 인가 코드와 시크릿 키를 검증한 후, 액세스 토큰과 사용자 정보를 클라이언트 서버에 반환합니다.
5. 클라이언트 서버가 사용자에게 액세스 토큰 전달
- 클라이언트 서버는 액세스 토큰을 받은 후, 이를 HTTPS 프로토콜을 통해 안전하게 사용자에게 전달합니다.
- 이때 클라이언트 서버는 자체적인 보안 조치를 취해, 사용자에게 발급한 토큰을 안전하게 관리하고 전송할 수 있도록 합니다.
6. 사용자가 액세스 토큰을 이용해 리소스 접근
- 사용자는 이제 액세스 토큰을 이용해 인증이 필요한 페이지나 리소스에 접근할 수 있습니다.
- 이 과정에서 사용자는 요청 헤더에 액세스 토큰을 포함시키며, 서버는 이 토큰을 확인하여 사용자의 권한을 인증한 후 요청한 페이지나 리소스에 접근을 허용합니다.
요약된 흐름
- 사용자가 클라이언트에서 "카카오로 로그인" 버튼 클릭 → 카카오 로그인 페이지로 리디렉션.
- 사용자가 카카오 로그인 페이지에서 로그인 → 카카오 서버가 인증 후 인가 코드를 클라이언트 서버에 전송.
- 클라이언트 서버가 인가 코드를 받아 카카오 서버에 액세스 토큰 요청.
- 클라이언트 서버가 액세스 토큰을 받아 사용자에게 전달.
- 사용자가 액세스 토큰을 사용해 리소스 서버에 안전하게 접근.
Share article