2.OAUTH2

강재영's avatar
Sep 20, 2024
2.OAUTH2
Contents
흐름도
💡
OAuth 2.0의 중요한 개념 중 하나는 **사용자 인증을 클라이언트 서버가 직접 처리하지 않고, 리소스 서버(카카오 서버와 같은 외부 서버)**가 대신 해준다는 것입니다. OAuth에서 클라이언트 서버는 사용자의 자격 증명(아이디와 비밀번호)을 직접 처리하지 않고, 대신 리소스 서버에서 사용자 인증을 처리한 후 인가 코드(Authorization Code) 또는 액세스 토큰을 통해 사용자 정보에 접근할 수 있게 됩니다.
 

1. OAuth에서의 역할 분담

  • 리소스 서버(카카오 서버): 사용자 인증을 담당하고, 사용자가 로그인에 성공하면 인가 코드 또는 액세스 토큰을 발급합니다. 사용자 인증은 여기서 이루어집니다.
  • 클라이언트 서버(애플리케이션): 리소스 서버에서 받은 인가 코드 또는 액세스 토큰을 사용해 사용자 정보를 가져오는 역할을 합니다. 사용자의 아이디나 비밀번호를 처리하지 않으며, 오직 액세스 토큰을 통해 인증된 사용자 데이터를 요청합니다.
  • 사용자: 클라이언트 서버(애플리케이션)를 이용해 카카오 로그인 등의 방법으로 리소스 서버에 인증을 요청합니다.

2. OAuth의 핵심 개념: 대리 인증

  • 사용자는 클라이언트 서버(웹사이트나 애플리케이션)에 로그인하려고 할 때, 클라이언트 서버가 사용자 인증을 처리하지 않습니다.
  • 대신, **리소스 서버(카카오 서버 등)**가 사용자의 인증을 대신 처리합니다.
  • 즉, OAuth 2.0에서 리소스 서버대리 인증자 역할을 하며, 클라이언트 서버는 인증이 완료된 사용자에 대한 정보를 리소스 서버를 통해 안전하게 받아올 수 있습니다.

3. OAuth의 장점

  • 보안 강화: 클라이언트 서버가 사용자의 자격 증명(아이디와 비밀번호)을 다루지 않으므로, 사용자 정보 유출의 위험을 줄일 수 있습니다. 대신, 신뢰할 수 있는 리소스 서버(카카오와 같은 외부 서비스)가 인증을 처리합니다.
  • 중앙화된 인증: 여러 애플리케이션이나 웹사이트에서 OAuth를 통해 카카오 로그인과 같은 중앙화된 인증 시스템을 사용할 수 있습니다. 사용자는 다양한 서비스에 동일한 OAuth 리소스 서버(카카오, 구글 등)를 통해 쉽게 로그인할 수 있습니다.
  • 권한 위임: 사용자는 OAuth를 통해 클라이언트 서버에게 리소스 서버에서 일정한 데이터를 접근할 권한만을 위임할 수 있습니다. 예를 들어, 사용자가 자신의 프로필 정보에만 접근을 허용할 수 있습니다.
 

흐름도

notion image

1. 사용자가 클라이언트에서 "카카오로 로그인" 버튼 클릭

  • 사용자가 클라이언트(웹사이트나 앱)에서 "카카오로 로그인" 버튼을 클릭하면, 클라이언트는 카카오 인증 페이지로 사용자를 리디렉션합니다.
  • 이 리디렉션은 일반적으로 카카오 API의 인가 엔드포인트로 진행되며, 여기에는 클라이언트 ID리디렉션 URI 등이 포함되어 있습니다.

2. 카카오 인증 페이지에서 사용자 로그인

  • 사용자가 카카오 로그인 페이지에서 자신의 아이디비밀번호를 입력한 후, "로그인" 버튼을 누릅니다.
  • 이때 카카오는 HTTPS를 사용하여 비대칭 암호화대칭 암호화로 사용자의 인증 정보를 보호합니다. 비대칭 암호화는 클라이언트-서버 간 데이터 송수신의 안전성을 보장하고, 대칭 암호화는 내부 데이터 처리에서 사용됩니다.

3. 카카오 서버가 사용자의 인증 정보를 확인

  • 카카오 서버는 사용자가 입력한 아이디비밀번호가 정확한지 확인합니다.
  • 인증이 성공하면, 카카오는 **인가 코드(Authorization Code)**를 클라이언트 서버에 보냅니다. 이 인가 코드는 일종의 임시 키로, 클라이언트가 이 코드를 사용해 카카오로부터 추가 권한을 요청할 수 있습니다.

4. 클라이언트 서버가 인가 코드를 받아 액세스 토큰 요청

  • 인가 코드를 받은 클라이언트 서버는 이를 이용해 카카오에 **액세스 토큰(Access Token)**을 요청합니다. 이때 클라이언트 서버는 등록된 **클라이언트 시크릿(Client Secret)**과 같은 정보를 포함하여 카카오 서버에 요청을 보냅니다.
  • 카카오는 인가 코드와 시크릿 키를 검증한 후, 액세스 토큰사용자 정보를 클라이언트 서버에 반환합니다.

5. 클라이언트 서버가 사용자에게 액세스 토큰 전달

  • 클라이언트 서버는 액세스 토큰을 받은 후, 이를 HTTPS 프로토콜을 통해 안전하게 사용자에게 전달합니다.
  • 이때 클라이언트 서버는 자체적인 보안 조치를 취해, 사용자에게 발급한 토큰을 안전하게 관리하고 전송할 수 있도록 합니다.

6. 사용자가 액세스 토큰을 이용해 리소스 접근

  • 사용자는 이제 액세스 토큰을 이용해 인증이 필요한 페이지나 리소스에 접근할 수 있습니다.
  • 이 과정에서 사용자는 요청 헤더에 액세스 토큰을 포함시키며, 서버는 이 토큰을 확인하여 사용자의 권한을 인증한 후 요청한 페이지나 리소스에 접근을 허용합니다.

요약된 흐름

  1. 사용자가 클라이언트에서 "카카오로 로그인" 버튼 클릭 → 카카오 로그인 페이지로 리디렉션.
  1. 사용자가 카카오 로그인 페이지에서 로그인 → 카카오 서버가 인증 후 인가 코드를 클라이언트 서버에 전송.
  1. 클라이언트 서버가 인가 코드를 받아 카카오 서버에 액세스 토큰 요청.
  1. 클라이언트 서버가 액세스 토큰을 받아 사용자에게 전달.
  1. 사용자가 액세스 토큰을 사용해 리소스 서버에 안전하게 접근.
 
Share article

강재영 블로그