Django Rest API + JWT
Django Rest API의 JWT 정보
JWT 인증은 다음과 같습니다. 클라이언트 측이 로그인 요구 (username, password)를 발행했을 때, 그 (username, password)가 올바른 것을 판정해 토큰 (JWT)을 돌려준다. 클라이언트는 수신 한 토큰 (JWT)을 localstorage에 저장하고 새로운 요청을 보낼 때 헤더에 해당 토크 (JWT)를 붙여 보냅니다. 서버는 토큰 (JWT)에서 사용자 정보를 검색하고 요청을 처리합니다. JWT 특유의 처리는 오로지 서버측(Django)에서 행해집니다. ==> 과거 기사 참고 : Phoenix1.3+Guardian1.0에서 JWT -Qiita
다음 장고 패키지를 사용합니다.
djangorestframework_simplejwt라고 하는 것도 있지만, django-rest-auth가 서포트하고 있는 것은 django-rest-framework-jwt 뿐이므로, 이쪽을 선택한다. ==> django-rest-auth
덧붙여서, 클라이언트로부터 요구시에 설정하는 헤더는, 양자로 조금 다르기 때문에 주의가 필요합니다.
django-rest-framework-jwt 헤더
$ curl -H "Authorization: JWT <your_token>" http://localhost:8000/protected-url/
djangorestframework_simplejwt의 헤더
$ curl -H "Authorization: Bearer <your_token>" http://localhost:8000/protected-url/
데모 설치
django-rest-auth 공식 사이트의 Demo를 지침에 따라 설치합니다.
데모 프로젝트 - django-rest-auth
이 데모는 django-rest-framework가 표준으로 가지고 있는 토큰 인증을 사용하고 있으며 JWT를 지원하지 않습니다. 우선 Demo가 정상적으로 동작하는 것을 확인하고 나서 JWT에 대응합니다.
cd /tmp
git clone https://github.com/Tivix/django-rest-auth.git
cd django-rest-auth/demo/
pip install -r requirements.pip
python manage.py migrate --settings=demo.settings --noinput
내 환경은 장고가 원격 서버에 구축되어 있기 때문에 서버의 도메인 이름을 입력하여 액세스를 허용합니다.
blog_project/settings.py---
ALLOWED_HOSTS = ["www.mypress.jp"]
---
여기까지 Demo 환경이 갖추어졌으므로, 기동해 확인해 봅니다.
python manage.py runserver 0:8080 --settings=demo.settings
이제 정상적으로 작동하는 것을 확인할 수있었습니다.
이하, JWT에 대응해 갑니다.
먼저 JWT 패키지를 설치합니다.
pip install djangorestframework-jwt
그런 다음 설정을 JWT용으로 변경합니다.
다음 두 곳(#new)을 추가합니다. 이것으로 JWT 대응이 되어 있을 것입니다.
demo/settings.pyALLOWED_HOSTS = ["www.mypress.jp"]
# Application definition
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'rest_framework',
'rest_framework.authtoken',
'rest_auth',
'allauth',
'allauth.account',
'rest_auth.registration',
# 'allauth.socialaccount',
# 'allauth.socialaccount.providers.facebook',
# 'rest_framework_swagger',
)
REST_USE_JWT = True # new
REST_SESSION_LOGIN = True
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
SITE_ID = 1
ACCOUNT_EMAIL_REQUIRED = False
ACCOUNT_AUTHENTICATION_METHOD = 'username'
ACCOUNT_EMAIL_VERIFICATION = 'optional'
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
# 'rest_framework.authentication.TokenAuthentication',
'rest_framework_jwt.authentication.JSONWebTokenAuthentication', # new
)
}
서버를 시작합니다.
python manage.py runserver 0:8080 --settings=demo.settings
실행 결과
계정 주변 메뉴
사용자 등록, 응답으로 JWT가 반환됩니다.
로그인, 성공시 응답으로 JWT가 반환됩니다.
비밀번호 변경, 로그인 시 JWT를 입력합니다.
세세한 곳의 조정이 필요할까 생각합니다만, 큰 프레임은 일단, 올바르게 동작하고 있는 것 같습니다.
urls. py
urls.py는 수정하지 않았지만 일단 게시합니다.
demo/urls.pyfrom django.conf.urls import include, url
from django.contrib import admin
from django.views.generic import TemplateView, RedirectView
from rest_framework_swagger.views import get_swagger_view
urlpatterns = [
url(r'^$', TemplateView.as_view(template_name="home.html"), name='home'),
url(r'^signup/$', TemplateView.as_view(template_name="signup.html"),
name='signup'),
url(r'^email-verification/$',
TemplateView.as_view(template_name="email_verification.html"),
name='email-verification'),
url(r'^login/$', TemplateView.as_view(template_name="login.html"),
name='login'),
url(r'^logout/$', TemplateView.as_view(template_name="logout.html"),
name='logout'),
url(r'^password-reset/$',
TemplateView.as_view(template_name="password_reset.html"),
name='password-reset'),
url(r'^password-reset/confirm/$',
TemplateView.as_view(template_name="password_reset_confirm.html"),
name='password-reset-confirm'),
url(r'^user-details/$',
TemplateView.as_view(template_name="user_details.html"),
name='user-details'),
url(r'^password-change/$',
TemplateView.as_view(template_name="password_change.html"),
name='password-change'),
# this url is used to generate email content
url(r'^password-reset/confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
TemplateView.as_view(template_name="password_reset_confirm.html"),
name='password_reset_confirm'),
url(r'^rest-auth/', include('rest_auth.urls')),
url(r'^rest-auth/registration/', include('rest_auth.registration.urls')),
url(r'^account/', include('allauth.urls')),
url(r'^admin/', admin.site.urls),
url(r'^accounts/profile/$', RedirectView.as_view(url='/', permanent=True), name='profile-redirect'),
url(r'^docs/$', get_swagger_view(title='API Docs'), name='api_docs')
]
이번은 이상입니다.
참고 사이트
Welcome to django-rest-auth’s documentation!
폭속으로 만들 수 있는 Django 유저 인증 기능【django-allauth】
How to Use JWT Authentication with Django REST Framework
Simple JWT - A JSON Web Token authentication plugin for the Django REST Framework.
Reference
이 문제에 관하여(Django Rest API + JWT), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sand/items/dc41716a2deef038c145
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
cd /tmp
git clone https://github.com/Tivix/django-rest-auth.git
cd django-rest-auth/demo/
pip install -r requirements.pip
python manage.py migrate --settings=demo.settings --noinput
---
ALLOWED_HOSTS = ["www.mypress.jp"]
---
python manage.py runserver 0:8080 --settings=demo.settings
pip install djangorestframework-jwt
ALLOWED_HOSTS = ["www.mypress.jp"]
# Application definition
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'rest_framework',
'rest_framework.authtoken',
'rest_auth',
'allauth',
'allauth.account',
'rest_auth.registration',
# 'allauth.socialaccount',
# 'allauth.socialaccount.providers.facebook',
# 'rest_framework_swagger',
)
REST_USE_JWT = True # new
REST_SESSION_LOGIN = True
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
SITE_ID = 1
ACCOUNT_EMAIL_REQUIRED = False
ACCOUNT_AUTHENTICATION_METHOD = 'username'
ACCOUNT_EMAIL_VERIFICATION = 'optional'
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
# 'rest_framework.authentication.TokenAuthentication',
'rest_framework_jwt.authentication.JSONWebTokenAuthentication', # new
)
}
python manage.py runserver 0:8080 --settings=demo.settings
계정 주변 메뉴
사용자 등록, 응답으로 JWT가 반환됩니다.
로그인, 성공시 응답으로 JWT가 반환됩니다.
비밀번호 변경, 로그인 시 JWT를 입력합니다.
세세한 곳의 조정이 필요할까 생각합니다만, 큰 프레임은 일단, 올바르게 동작하고 있는 것 같습니다.
urls. py
urls.py는 수정하지 않았지만 일단 게시합니다.
demo/urls.pyfrom django.conf.urls import include, url
from django.contrib import admin
from django.views.generic import TemplateView, RedirectView
from rest_framework_swagger.views import get_swagger_view
urlpatterns = [
url(r'^$', TemplateView.as_view(template_name="home.html"), name='home'),
url(r'^signup/$', TemplateView.as_view(template_name="signup.html"),
name='signup'),
url(r'^email-verification/$',
TemplateView.as_view(template_name="email_verification.html"),
name='email-verification'),
url(r'^login/$', TemplateView.as_view(template_name="login.html"),
name='login'),
url(r'^logout/$', TemplateView.as_view(template_name="logout.html"),
name='logout'),
url(r'^password-reset/$',
TemplateView.as_view(template_name="password_reset.html"),
name='password-reset'),
url(r'^password-reset/confirm/$',
TemplateView.as_view(template_name="password_reset_confirm.html"),
name='password-reset-confirm'),
url(r'^user-details/$',
TemplateView.as_view(template_name="user_details.html"),
name='user-details'),
url(r'^password-change/$',
TemplateView.as_view(template_name="password_change.html"),
name='password-change'),
# this url is used to generate email content
url(r'^password-reset/confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
TemplateView.as_view(template_name="password_reset_confirm.html"),
name='password_reset_confirm'),
url(r'^rest-auth/', include('rest_auth.urls')),
url(r'^rest-auth/registration/', include('rest_auth.registration.urls')),
url(r'^account/', include('allauth.urls')),
url(r'^admin/', admin.site.urls),
url(r'^accounts/profile/$', RedirectView.as_view(url='/', permanent=True), name='profile-redirect'),
url(r'^docs/$', get_swagger_view(title='API Docs'), name='api_docs')
]
이번은 이상입니다.
참고 사이트
Welcome to django-rest-auth’s documentation!
폭속으로 만들 수 있는 Django 유저 인증 기능【django-allauth】
How to Use JWT Authentication with Django REST Framework
Simple JWT - A JSON Web Token authentication plugin for the Django REST Framework.
Reference
이 문제에 관하여(Django Rest API + JWT), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sand/items/dc41716a2deef038c145
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
from django.conf.urls import include, url
from django.contrib import admin
from django.views.generic import TemplateView, RedirectView
from rest_framework_swagger.views import get_swagger_view
urlpatterns = [
url(r'^$', TemplateView.as_view(template_name="home.html"), name='home'),
url(r'^signup/$', TemplateView.as_view(template_name="signup.html"),
name='signup'),
url(r'^email-verification/$',
TemplateView.as_view(template_name="email_verification.html"),
name='email-verification'),
url(r'^login/$', TemplateView.as_view(template_name="login.html"),
name='login'),
url(r'^logout/$', TemplateView.as_view(template_name="logout.html"),
name='logout'),
url(r'^password-reset/$',
TemplateView.as_view(template_name="password_reset.html"),
name='password-reset'),
url(r'^password-reset/confirm/$',
TemplateView.as_view(template_name="password_reset_confirm.html"),
name='password-reset-confirm'),
url(r'^user-details/$',
TemplateView.as_view(template_name="user_details.html"),
name='user-details'),
url(r'^password-change/$',
TemplateView.as_view(template_name="password_change.html"),
name='password-change'),
# this url is used to generate email content
url(r'^password-reset/confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
TemplateView.as_view(template_name="password_reset_confirm.html"),
name='password_reset_confirm'),
url(r'^rest-auth/', include('rest_auth.urls')),
url(r'^rest-auth/registration/', include('rest_auth.registration.urls')),
url(r'^account/', include('allauth.urls')),
url(r'^admin/', admin.site.urls),
url(r'^accounts/profile/$', RedirectView.as_view(url='/', permanent=True), name='profile-redirect'),
url(r'^docs/$', get_swagger_view(title='API Docs'), name='api_docs')
]
Reference
이 문제에 관하여(Django Rest API + JWT), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sand/items/dc41716a2deef038c145텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)