본문 바로가기
프로젝트/Joontooling

Joontooling 프로젝트 [OAuth]

by JayAlex07 2023. 3. 27.

Joontooling 프로젝트

업무 : 회원가입 모델링

 

OAuth란?

Open Authorization 은 비밀번호 없이, 제 3자 웹사이트에 있는 정보를 현재 사용하려고 하는 웹사이트가 사용할 수 있도록 허용하는 것이다

  • 네이버는 나의 웹사이트한테 accessToken을 전달 하면서, 나의 웹 사이트에서 필요한 기능들만 부분적으로 허용한다
    • accessToken을 통해서 네이버에 접근해서 데이터를 읽고, 생성하고, 삭제하고, 수정할 수 있다
  • 나의 웹사이트에서 네이버의 ID, Password를 직접적으로 사용하는 것이 아니라서 보안적인 측면에서 안전하다

 

역할

  • Resource Server (Naver) : 사용하고자 하는 자원 (데이터)의 위치, 즉 Resource Server에 있다
    • 나의 웹사이트에서 네이버 안에 있는 자원을 사용하려고 한다
  • Resource Owner (User) : 자원 (데이터)의 소유자
    • 네이버 안에 있는 자원의 소유자는, 유저, 즉 '나'다
  • Client (나의 웹사이트) : 자원 (데이터)을 사용하고자 하는 웹 서비스 또는 어플리케이션이다
    • 네이버의 자원을 사용하려고 하는 나의 웹사이트다

 

 

네이버 OAuth 연동

  • Client ID : 만들고자 하는 어플리케이션 / 웹 서비스의 식별자
  • Client Secret : Client ID에 대한 비밀번호 (외부 노출을 하면 절대로 안 된다)
  • Callback URL : 클라이언트가 Resource Server, 즉 다른 웹 사이트에게 요청을 보낼 수 있는 URL이다
    • 이 URL로 요청을 보내지 않으면, Resource Server는 요청을 무시한다
  • 네이버에서 allauth를 사용하려면 callback url은 http://localhost:8000/accounts/naver/login/callback/ 이다

 

Django

장고에는 django-allauth가 있다

django-allauth에는 다양한 소셜로그인 처리를 해주는 장고 익스텐션이다

  • django-allauth 설치
pip install django-allauth
  • settings.py 수정
    • TEMPLATES의 'OPTIONS / context_processors'에 'django.template.context_processors.request'가 꼭 들어가야 한다
    • AUTHENTICATION_BACKENDS를 추가해준다
    • INSTALLED_APPS에 allauth 관련된 것들을 추가해준다
      • 'allauth.socialaccount.providers.naver', 네이버 소셜 로그인을 위한 코드
      • 그 외에, 아래에 INSTALLED_APPS에 기재된 것들은, 다 추가해야 한다
    • AUTHENTICATION_BACKENDS : 로그인 과정 처리를 누구한테 맡기는지 설정
      • 'django.contrib.auth.backends.ModelBackend' : 웹 사이트 내 회원가입 한 로그인 방식
      • 'allauth.account.auth_backends.AuthenticationBackend' : Allauth를 사용한 로그인 방식
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                # Already defined Django-related contexts here

                # `allauth` needs this from django
                'django.template.context_processors.request',
            ],
        },
    },
]

INSTALLED_APPS = [
    'django.contrib.auth',
    'django.contrib.messages',
    'django.contrib.sites',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',

    'allauth.socialaccount.providers.naver',
]

AUTHENTICATION_BACKENDS = [
    # Needed to login by username in Django admin, regardless of `allauth`
    'django.contrib.auth.backends.ModelBackend',

    # `allauth` specific authentication methods, such as login by e-mail
    'allauth.account.auth_backends.AuthenticationBackend',
]

SITE_ID = 1

LOGIN_REDIRECT_URL = '/products/'
  • allauth.account : 소셜 로그인으로 로그인 한 사람들의 목록 관리
  • allauth.socialaccount : 소셜 account 정보를 관리
  • config 파일의 urls.py에 아래를 추가한다
urlpatterns = [
    path('accounts/', include('allauth.urls')),
]
  • 장고 Admin 들어가기

'프로젝트 > Joontooling' 카테고리의 다른 글

Joontooling 프로젝트 - Daum 주소 API  (0) 2023.02.22
Joontooling 프로젝트, Day 1  (0) 2023.02.04