📌 OAuth2 & 네이버 소셜 로그인 흐름 완전 정리
🔐 OAuth2란?
OAuth2는 웹/모바일 애플리케이션이 사용자의 비밀번호를 알지 않고도 외부 서비스의 데이터에 접근할 수 있게 해주는 인증/권한 부여 프레임워크입니다.
구성요소 설명
Resource Owner | 로그인하는 사용자 (리소스 소유자) |
Client | 사용자 대신 API 요청을 보내는 애플리케이션 |
Authorization Server | 인증 및 토큰 발급 담당 서버 |
Resource Server | 실제 API와 데이터를 보유한 서버 |
주요 토큰:
- Access Token: 보호된 리소스 접근용 인증 수단
- Refresh Token: 액세스 토큰 만료 시 새 토큰 발급용
☑️ 네이버 로그인 흐름 분석 (위 흐름도 기반)
전체 절차 요약
단계 | 어플리케이션 동작 | 네이버 서버 동작 |
1단계 | 네이버 로그인 인증 요청 | → |
2단계 | ← Callback URL로 code/state 전달 | |
3단계 | 액세스 토큰 발급 요청 | → |
4단계 | ← 토큰 발급 및 전달 | |
5단계 | 액세스 토큰으로 프로필 API 호출 | → |
6단계 | ← 사용자 정보 응답 전달 |
⚙️ 환경변수 및 설정
# settings.py
NAVER_CLIENT_ID = SECRET['naver']['client_id']
NAVER_SECRET = SECRET['naver']['secret']
🔒 민감 정보는 secret.json 또는 환경변수로 분리 보관하세요.
🧩 네이버 로그인 기능 개발 흐름
1️⃣ RedirectView로 로그인 페이지 유도
class NaverLoginRedirectView(RedirectView):
def get_redirect_url(self, *args, **kwargs):
... # state 생성 + redirect_uri 설정 후 네이버 로그인 URL 생성
2️⃣ Callback 처리
def naver_callback(request):
code = request.GET.get('code')
state = request.GET.get('state')
access_token = get_naver_access_token(code, state)
profile = get_naver_profile(access_token)
...
- code로 액세스 토큰 요청
- 토큰으로 사용자 이메일/닉네임 등 프로필 조회
- 기존 유저 → 로그인 / 신규 유저 → 닉네임 등록 후 가입
3️⃣ 닉네임 등록 (신규 회원용)
def oauth_nickname(request):
access_token = request.GET.get('access_token')
profile = get_naver_profile(access_token)
email = profile.get('email')
... # 신규 유저 생성 후 로그인
🔧 액세스 토큰 & 프로필 API 요청 함수
Access Token 요청
def get_naver_access_token(code, state):
response = requests.get(NAVER_TOKEN_URL, params={...})
return response.json().get('access_token')
프로필 요청
def get_naver_profile(access_token):
headers = {'Authorization': f'Bearer {access_token}'}
response = requests.get(NAVER_PROFILE_URL, headers=headers)
return response.json().get('response')
✅ 요약 정리
항목 | 설명 |
인증 흐름 | code → access_token → 사용자 정보 API 호출 |
RedirectView | 네이버 로그인 URL로 리디렉션 담당 |
Callback | 로그인 완료 후 code/state 처리 |
access_token | 인증된 사용자의 API 접근 권한 부여 |
프로필 API | 이메일, 닉네임, 이름 등 반환 |
네이버 로그인은 OAuth2의 대표적 활용 사례로, 로그인 절차를 통해 안전하고 간편하게 사용자 인증 및 정보를 활용할 수 있게 해줍니다 🔐
'기술블로그-Django편' 카테고리의 다른 글
📘 Django에서 as_view()가 필요한 이유 - FBV vs CBV 완전 정리 (0) | 2025.05.19 |
---|---|
🔐 Django signing.dumps() 완벽 이해하기 (0) | 2025.05.19 |
📌 Django-extensions 완전 가이드 - 실전 개발을 위한 필수 도구 (0) | 2025.05.16 |
📌 Django-summernote - WYSIWYG 에디터 통합 가이드 (0) | 2025.05.16 |
📌 Django ImageField 완전 정리 - 이미지 업로드 기능 구현 가이드 (0) | 2025.05.16 |