📌 OAuth2 & 네이버 소셜 로그인 흐름 완전 정리

2025. 5. 16. 15:59·기술블로그-Django편

📌 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
'기술블로그-Django편' 카테고리의 다른 글
  • 📘 Django에서 as_view()가 필요한 이유 - FBV vs CBV 완전 정리
  • 🔐 Django signing.dumps() 완벽 이해하기
  • 📌 Django-extensions 완전 가이드 - 실전 개발을 위한 필수 도구
  • 📌 Django-summernote - WYSIWYG 에디터 통합 가이드
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (702)
      • Python (32)
      • 프로젝트 (43)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (40)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (4)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
📌 OAuth2 & 네이버 소셜 로그인 흐름 완전 정리
상단으로

티스토리툴바