Today I Learned D - 42

손상훈·2022년 10월 31일
0
    1. 28
      < 장고 심화 3주차 >

drf에서 jwt 사용해보기

  • 로컬스토리지?
    LocalStorage란 브라우저 내에 존재하는 저장소로써, 웹 브라우저가 종료되면 사라지는 SessionStorage 와는 다르게 브라우저가 종료되어도 저장된 정보가 계속 남아있는 공간입니다.

localStorage 의 데이터는 key-value 쌍으로 저장됩니다.

우리는 서버로 부터 응답받은 JWT 정보를 localStorage 에 넣어놓고 인가를 필요로 하는 요청을 할 때 access 토큰을 header 에 담아서 전달할 수 있습니다.

토큰 인증 방식

  • 사용자가 인증을 수행하면 서버에서 토큰을 생성한 뒤에 저장하지 않고 토큰값을 사용자의 브라우저에게 응답한다.

토큰은 username, user_id 등 사용자를 설명할 수 있는 데이터를 포함한다. 이러한 데이터를 클레임(claim)이라고 한다.

VERIFY SIGNATURE

  • 토큰 자체의 진위여부 판단용도

$ pip install djangorestframework-simplejwt

- JWT 인증 방식 추가하기

 # settings.py에 넣어주기 
 
'DEFAULT_AUTHENTICATION_CLASSES':
'rest_framework_simplejwt.authentication.JWTAuthentication',
],

INSTALLED_APPS = [
    'rest_framework_simplejwt',
]

# 아래는 user앱폴더에 urls.py

from rest_framework_simplejwt.views import (
    TokenObtainPairView,
    TokenRefreshView,
)

urlpatterns = [
    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]

< setting.py jwt 옵션 >

from datetime import timedelta

SIMPLE_JWT = {
		# Access 토큰 유효 시간 설정하기
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
		# Refresh 토큰 유효 시간 설정하기
    'REFRESH_TOKEN_LIFETIME': timedelta(days=1),

    'ROTATE_REFRESH_TOKENS': False,
    'BLACKLIST_AFTER_ROTATION': False,
    'UPDATE_LAST_LOGIN': False,

    'ALGORITHM': 'HS256',
    'SIGNING_KEY': SECRET_KEY,
    'VERIFYING_KEY': None,
    'AUDIENCE': None,
    'ISSUER': None,
    'JWK_URL': None,
    'LEEWAY': 0,

    'AUTH_HEADER_TYPES': ('Bearer',),
    'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION',
    'USER_ID_FIELD': 'id',
    'USER_ID_CLAIM': 'user_id',
    'USER_AUTHENTICATION_RULE': 'rest_framework_simplejwt.authentication.default_user_authentication_rule',

    'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
    'TOKEN_TYPE_CLAIM': 'token_type',
    'TOKEN_USER_CLASS': 'rest_framework_simplejwt.models.TokenUser',

    'JTI_CLAIM': 'jti',

    'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
    'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),
    'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),
}

기본적인 사용법이다. urls.py 는 내가 쓰는 api url 로 수정을 해주면 된다.

mock api란?

Mockup(모형) API Server(Mock API라고도 함)는 말 그대로 가짜 API 서버이다. 클라이언트 요청에 실제 서버처럼 동작하기보다는 미리 저장된 데이터를 단순하게 돌려주는 형태이다. 다시 말해 이는 가짜 서버를 사용해 실제 서버와 통신하는 것처럼 만들 수 있다.

profile
< 코린이의 코딩모험기 >

0개의 댓글

관련 채용 정보