- Published On
OAuth(소셜 로그인)의 구동 원리
OAuth란? 흔히 소셜 로그인
으로 알려져있고, Open Authorization
입니다.
제3자 애플리케이션이 자원의 소유자를 대신하여 자원에 접근할 수 있도록 허용하는 표준 프로토콜입니다.
OAuth 2.0은 이 표준의 최신 버전으로, 다양한 클라이언트 애플리케이션이 안전하게 권한을 위임받을 수 있도록 설계되었습니다.
여기서는 네이버 소셜 로그인을 예로 들어 설명하겠습니다. 다른 소셜 로그인도 대부분 비슷한 원리를 따릅니다.
1. 소셜 로그인 협약 맺기
소셜 로그인 서비스 신청
소셜 로그인 서비스를 이용하려면 먼저 네이버와 같은 소셜 로그인 제공 업체에 서비스 이용을 신청해야 합니다.
-
보낼 주소 설정: 네이버에 요청을 보낼 주소를 설정합니다.
- 예:
travel-point.com/naverlogin
- 예:
-
정보 받을 주소 설정: 네이버로부터 사용자 정보를 받을 주소를 설정합니다. 이를
callback URL
이라고 합니다.-
예:
travel-point.com/callback
-
보통 callback url로
${url}/api/auth/naver/callback
으로 많이 등록합니다.
-
-
Client ID 및 Client Secret 발급: 네이버가 제공하는 Client ID와 Client Secret을 받습니다.
네이버의 경우 naver-developers에서 발급.
개인: 소셜 로그인 서비스 이용 (사이트에서 네이버에 보낼 주소 / 정보 받을 주소 입력)
네이버: "그럼 이용할 때 아이디랑 키 줄게" (Client ID, Client Secret)
2. 사용자가 개인정보 승인
네이버 로그인 버튼 클릭
사용자가 네이버 로그인 버튼을 클릭하면 다음과 같은 과정이 진행됩니다
-
사용자 리디렉션: 사용자는 설정된 보낼 주소로 리디렉션됩니다. 이때 Client ID와 Client Secret도 함께 전송됩니다.
-
사용자 승인: 사용자가 네이버에서 개인정보 제공을 승인합니다.
-
승인 코드 발급: 네이버가 사용자 승인 코드를 저희 사이트의 콜백 URL에 쿼리로 전달합니다.
예: travel-point.com/callback?code='승인코드'
3. Access Token 발급
저희 사이트는 네이버에 승인 코드를 전송하여 Access Token을 요청합니다.
-
승인 코드 전송: 승인 코드와 Client ID, Client Secret을 네이버에 전송합니다.
-
Access Token 발급: 네이버가 Access Token을 발급합니다.
4. 사용자 정보 요청
Access Token으로 사용자 정보 요청
발급받은 Access Token을 사용하여 네이버에 사용자 정보를 요청합니다.
-
Access Token 전송: Access Token을 네이버에 전송합니다.
-
사용자 정보 수신: 네이버가 사용자 정보를 응답합니다.
Oauth 신청 요약
단계 | 설명 |
---|---|
서비스 신청 | 네이버에 서비스 이용 신청, 보낼 주소와 받을 주소 설정, Client ID와 Client Secret 발급 |
사용자 승인 | 사용자가 네이버 로그인 버튼 클릭, 승인 후 승인 코드 발급 |
Access Token 발급 | 승인 코드를 네이버에 전송하여 Access Token 발급 |
사용자 정보 요청 | Access Token으로 사용자 정보를 요청하여 수신 |
전체적인 과정 요약
-
고객 컴퓨터에서 정보 동의
: 사용자가 네이버 로그인 페이지에서 개인정보 제공에 동의합니다. -
네이버 서버에서 승인 코드를 저희 사이트로 보냄
: 네이버 서버가 사용자의 동의를 확인하고, 저희 사이트의 콜백 URL로 승인 코드를 보냅니다. -
승인 코드로 Access 토큰 발급
: 저희 사이트는 승인 코드를 사용하여 네이버 서버로부터 Access 토큰을 요청하고 발급받습니다. -
Access token을 네이버에 정보 요청
: 발급받은 Access 토큰을 사용하여 네이버 서버에 사용자 정보를 요청합니다. -
사용자 정보 수신
: 네이버 서버가 요청을 확인하고, 사용자 정보를 저희 사이트로 응답합니다.
이전 포스트
NextAuth.js 인증 구현하기다음 포스트
FrontEnd 기본 지식연관된 포스트 구경가기