Published On

OAuth(소셜 로그인)의 구동 원리


OAuth란? 흔히 소셜 로그인으로 알려져있고, Open Authorization입니다.

제3자 애플리케이션이 자원의 소유자를 대신하여 자원에 접근할 수 있도록 허용하는 표준 프로토콜입니다.

OAuth 2.0은 이 표준의 최신 버전으로, 다양한 클라이언트 애플리케이션이 안전하게 권한을 위임받을 수 있도록 설계되었습니다.

여기서는 네이버 소셜 로그인을 예로 들어 설명하겠습니다. 다른 소셜 로그인도 대부분 비슷한 원리를 따릅니다.

1. 소셜 로그인 협약 맺기

소셜 로그인 서비스 신청

소셜 로그인 서비스를 이용하려면 먼저 네이버와 같은 소셜 로그인 제공 업체에 서비스 이용을 신청해야 합니다.

  1. 보낼 주소 설정: 네이버에 요청을 보낼 주소를 설정합니다.

    • 예: travel-point.com/naverlogin
  2. 정보 받을 주소 설정: 네이버로부터 사용자 정보를 받을 주소를 설정합니다. 이를 callback URL이라고 합니다.

    • 예: travel-point.com/callback

    • 보통 callback url로 ${url}/api/auth/naver/callback으로 많이 등록합니다.

  3. Client ID 및 Client Secret 발급: 네이버가 제공하는 Client ID와 Client Secret을 받습니다.

네이버의 경우 naver-developers에서 발급.

개인: 소셜 로그인 서비스 이용 (사이트에서 네이버에 보낼 주소 / 정보 받을 주소 입력)

네이버: "그럼 이용할 때 아이디랑 키 줄게" (Client ID, Client Secret)

2. 사용자가 개인정보 승인

네이버 로그인 버튼 클릭

사용자가 네이버 로그인 버튼을 클릭하면 다음과 같은 과정이 진행됩니다

  1. 사용자 리디렉션: 사용자는 설정된 보낼 주소로 리디렉션됩니다. 이때 Client ID와 Client Secret도 함께 전송됩니다.

  2. 사용자 승인: 사용자가 네이버에서 개인정보 제공을 승인합니다.

  3. 승인 코드 발급: 네이버가 사용자 승인 코드를 저희 사이트의 콜백 URL에 쿼리로 전달합니다.

    예: travel-point.com/callback?code='승인코드'

3. Access Token 발급

저희 사이트는 네이버에 승인 코드를 전송하여 Access Token을 요청합니다.

  1. 승인 코드 전송: 승인 코드와 Client ID, Client Secret을 네이버에 전송합니다.

  2. Access Token 발급: 네이버가 Access Token을 발급합니다.

4. 사용자 정보 요청

Access Token으로 사용자 정보 요청

발급받은 Access Token을 사용하여 네이버에 사용자 정보를 요청합니다.

  1. Access Token 전송: Access Token을 네이버에 전송합니다.

  2. 사용자 정보 수신: 네이버가 사용자 정보를 응답합니다.

Oauth 신청 요약

단계설명
서비스 신청네이버에 서비스 이용 신청, 보낼 주소와 받을 주소 설정, Client ID와 Client Secret 발급
사용자 승인사용자가 네이버 로그인 버튼 클릭, 승인 후 승인 코드 발급
Access Token 발급승인 코드를 네이버에 전송하여 Access Token 발급
사용자 정보 요청Access Token으로 사용자 정보를 요청하여 수신

전체적인 과정 요약

  1. 고객 컴퓨터에서 정보 동의: 사용자가 네이버 로그인 페이지에서 개인정보 제공에 동의합니다.

  2. 네이버 서버에서 승인 코드를 저희 사이트로 보냄: 네이버 서버가 사용자의 동의를 확인하고, 저희 사이트의 콜백 URL로 승인 코드를 보냅니다.

  3. 승인 코드로 Access 토큰 발급: 저희 사이트는 승인 코드를 사용하여 네이버 서버로부터 Access 토큰을 요청하고 발급받습니다.

  4. Access token을 네이버에 정보 요청: 발급받은 Access 토큰을 사용하여 네이버 서버에 사용자 정보를 요청합니다.

  5. 사용자 정보 수신: 네이버 서버가 요청을 확인하고, 사용자 정보를 저희 사이트로 응답합니다.