어제 파이썬을 도입 한 도 아마추어가 장고에서 jwt 토큰 인증을 구현할 수 있는지 시도했습니다.
참고로 한 사이트
장고에서 JWT를 사용한 토큰 인증 구현
이번에 만든 것은 여기에 저장됩니다.
gaku3601/jwt_django
조속히 해라.
djangorestframework-jwt되는 것이 필요한 것 같기 때문에 넣어 둔다.
명령$ pip install djangorestframework-jwt
프로젝트 만들기
명령$ django-admin startproject jwtapp .
djangorestframework-jwt를 이용하기 위해서는 설정을 바꾸지 않으면 안되는 것 같기 때문에, 이하를 최하부에 추기한다.
[jwtapp/settings.py]
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
),
'NON_FIELD_ERRORS_KEY': 'detail',
'TEST_REQUEST_DEFAULT_FORMAT': 'json'
}
다음은 라우팅 설정
[jwtapp/urls.py]
from django.contrib import admin
from django.urls import path
from rest_framework_jwt.views import obtain_jwt_token # 追記
urlpatterns = [
path('admin/', admin.site.urls),
path('jwt-token/', obtain_jwt_token), # 追記
]
이것으로 움직이는 것 같지만, 매번이면서 "migrate 해라!"라고 화내므로, migrate 해 기동한다.
명령$ python manage.py migrate
$ python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
February 19, 2019 - 23:26:17
Django version 2.1.7, using settings 'jwtapp.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
🎉error없이 움직였다(´・ω・`)b🎉
superuser를 만들어 토큰이 반환되는지 확인해 봅니다.
명령$ python manage.py createsuperuser
Username (leave blank to use 'gaku'):
Email address: [email protected]
Password:
Password (again):
Superuser created successfully.
시작하고 curl 명령을 치고 token이 반환되는지 확인합니다.
명령$ python manage.py runserver
...別のターミナルで。。。
$ curl http://localhost:8000/jwt-token/ -d "username=gaku&password=**************"
{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6Imdha3UiLCJleHAiOjE1NTA2MTk0MzQsImVtYWlsIjoicHJvLmdha3VAZ21haWwuY29tIn0.IBspHS2srFvwRPSBitosjfuIlGfrVFw1gJPXGeO_bEo"}
🎉token이 돌아왔다 yぉ오오오! 🎉
token의 내용을 본다
jwt. 이오
후무(´・ω・`)
치♡나♡미♡에♪
명령$ curl http://localhost:8000/jwt-token/ -d "username=gaku&password=*******wrong password*******"
{"detail":["Unable to log in with provided credentials."]}
잘못된 password를 보내면 화가납니다.
인증된 API를 작성해 봅니다.
발행한 jwt를 부여하지 않으면 이용할 수 없는 API를 써 보자.
rest_framework를 넣지 않은 경우 다음 명령으로 넣습니다.
명령$ pip install djangorestframework
views.py를 만들고 다음과 같이 편집
[jwtapp/views.py]
from rest_framework.generics import GenericAPIView
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework import status
class PingViewSet(GenericAPIView):
permission_classes = (IsAuthenticated,)
def get(self, request, format=None):
return Response(data={'username': request.user.username}, status=status.HTTP_200_OK)
만든 views를 라우팅으로 지정할 수 있도록 urls.py 수정
from django.contrib import admin
from django.urls import path
from rest_framework_jwt.views import obtain_jwt_token
from . import views #追記
urlpatterns = [
path('admin/', admin.site.urls),
path('jwt-token/', obtain_jwt_token),
path('ping', views.PingViewSet.as_view()), # 追記
]
좋아! 시작하고 확인해보기
명령$ python manage.py runserver
...別ターミナルで...
$ curl http://localhost:8000/ping -H "Authorization: JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6Imdha3UiLCJleHAiOjE1NTA2MjA2MzYsImVtYWlsIjoicHJvLmdha3VAZ21haWwuY29tIn0.xdEPAe9LvzZVuP1DBHeb8pfWOOiPTmX4K76tHNf15bg"
{"username":"gaku"}
🎉 돌아왔다 아(´・ω・`)🎉
그건 그렇고, 토큰없이 액세스하면
명령$ curl http://localhost:8000/ping
{"detail":"Authentication credentials were not provided."}
그리고 화가납니다.
끝
일단 움직였다.
하지만, AUTHENTICATION AND AUTHORIZATION의 user로 jwt token을 발행하는 형태가 되어 있는데 어디 어떤 것일까?
basic 인증이라면 순살로 jwt token을 발행할 수 있는 것을 알았으므로, 앞으로는 OpenID등의 인증도 찾아가고 싶다(´・ω・`)
Reference
이 문제에 관하여(어제 파이썬을 도입 한 도 아마추어가 장고에서 jwt 토큰 인증을 구현할 수 있는지 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gaku3601/items/19f734fedd5fe19e5c77
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
gaku3601/jwt_django
조속히 해라.
djangorestframework-jwt되는 것이 필요한 것 같기 때문에 넣어 둔다.
명령$ pip install djangorestframework-jwt
프로젝트 만들기
명령$ django-admin startproject jwtapp .
djangorestframework-jwt를 이용하기 위해서는 설정을 바꾸지 않으면 안되는 것 같기 때문에, 이하를 최하부에 추기한다.
[jwtapp/settings.py]
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
),
'NON_FIELD_ERRORS_KEY': 'detail',
'TEST_REQUEST_DEFAULT_FORMAT': 'json'
}
다음은 라우팅 설정
[jwtapp/urls.py]
from django.contrib import admin
from django.urls import path
from rest_framework_jwt.views import obtain_jwt_token # 追記
urlpatterns = [
path('admin/', admin.site.urls),
path('jwt-token/', obtain_jwt_token), # 追記
]
이것으로 움직이는 것 같지만, 매번이면서 "migrate 해라!"라고 화내므로, migrate 해 기동한다.
명령$ python manage.py migrate
$ python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
February 19, 2019 - 23:26:17
Django version 2.1.7, using settings 'jwtapp.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
🎉error없이 움직였다(´・ω・`)b🎉
superuser를 만들어 토큰이 반환되는지 확인해 봅니다.
명령$ python manage.py createsuperuser
Username (leave blank to use 'gaku'):
Email address: [email protected]
Password:
Password (again):
Superuser created successfully.
시작하고 curl 명령을 치고 token이 반환되는지 확인합니다.
명령$ python manage.py runserver
...別のターミナルで。。。
$ curl http://localhost:8000/jwt-token/ -d "username=gaku&password=**************"
{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6Imdha3UiLCJleHAiOjE1NTA2MTk0MzQsImVtYWlsIjoicHJvLmdha3VAZ21haWwuY29tIn0.IBspHS2srFvwRPSBitosjfuIlGfrVFw1gJPXGeO_bEo"}
🎉token이 돌아왔다 yぉ오오오! 🎉
token의 내용을 본다
jwt. 이오
후무(´・ω・`)
치♡나♡미♡에♪
명령$ curl http://localhost:8000/jwt-token/ -d "username=gaku&password=*******wrong password*******"
{"detail":["Unable to log in with provided credentials."]}
잘못된 password를 보내면 화가납니다.
인증된 API를 작성해 봅니다.
발행한 jwt를 부여하지 않으면 이용할 수 없는 API를 써 보자.
rest_framework를 넣지 않은 경우 다음 명령으로 넣습니다.
명령$ pip install djangorestframework
views.py를 만들고 다음과 같이 편집
[jwtapp/views.py]
from rest_framework.generics import GenericAPIView
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework import status
class PingViewSet(GenericAPIView):
permission_classes = (IsAuthenticated,)
def get(self, request, format=None):
return Response(data={'username': request.user.username}, status=status.HTTP_200_OK)
만든 views를 라우팅으로 지정할 수 있도록 urls.py 수정
from django.contrib import admin
from django.urls import path
from rest_framework_jwt.views import obtain_jwt_token
from . import views #追記
urlpatterns = [
path('admin/', admin.site.urls),
path('jwt-token/', obtain_jwt_token),
path('ping', views.PingViewSet.as_view()), # 追記
]
좋아! 시작하고 확인해보기
명령$ python manage.py runserver
...別ターミナルで...
$ curl http://localhost:8000/ping -H "Authorization: JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6Imdha3UiLCJleHAiOjE1NTA2MjA2MzYsImVtYWlsIjoicHJvLmdha3VAZ21haWwuY29tIn0.xdEPAe9LvzZVuP1DBHeb8pfWOOiPTmX4K76tHNf15bg"
{"username":"gaku"}
🎉 돌아왔다 아(´・ω・`)🎉
그건 그렇고, 토큰없이 액세스하면
명령$ curl http://localhost:8000/ping
{"detail":"Authentication credentials were not provided."}
그리고 화가납니다.
끝
일단 움직였다.
하지만, AUTHENTICATION AND AUTHORIZATION의 user로 jwt token을 발행하는 형태가 되어 있는데 어디 어떤 것일까?
basic 인증이라면 순살로 jwt token을 발행할 수 있는 것을 알았으므로, 앞으로는 OpenID등의 인증도 찾아가고 싶다(´・ω・`)
Reference
이 문제에 관하여(어제 파이썬을 도입 한 도 아마추어가 장고에서 jwt 토큰 인증을 구현할 수 있는지 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gaku3601/items/19f734fedd5fe19e5c77
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ pip install djangorestframework-jwt
$ django-admin startproject jwtapp .
[jwtapp/settings.py]
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
),
'NON_FIELD_ERRORS_KEY': 'detail',
'TEST_REQUEST_DEFAULT_FORMAT': 'json'
}
[jwtapp/urls.py]
from django.contrib import admin
from django.urls import path
from rest_framework_jwt.views import obtain_jwt_token # 追記
urlpatterns = [
path('admin/', admin.site.urls),
path('jwt-token/', obtain_jwt_token), # 追記
]
$ python manage.py migrate
$ python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
February 19, 2019 - 23:26:17
Django version 2.1.7, using settings 'jwtapp.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
$ python manage.py createsuperuser
Username (leave blank to use 'gaku'):
Email address: [email protected]
Password:
Password (again):
Superuser created successfully.
$ python manage.py runserver
...別のターミナルで。。。
$ curl http://localhost:8000/jwt-token/ -d "username=gaku&password=**************"
{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6Imdha3UiLCJleHAiOjE1NTA2MTk0MzQsImVtYWlsIjoicHJvLmdha3VAZ21haWwuY29tIn0.IBspHS2srFvwRPSBitosjfuIlGfrVFw1gJPXGeO_bEo"}
$ curl http://localhost:8000/jwt-token/ -d "username=gaku&password=*******wrong password*******"
{"detail":["Unable to log in with provided credentials."]}
$ pip install djangorestframework
[jwtapp/views.py]
from rest_framework.generics import GenericAPIView
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework import status
class PingViewSet(GenericAPIView):
permission_classes = (IsAuthenticated,)
def get(self, request, format=None):
return Response(data={'username': request.user.username}, status=status.HTTP_200_OK)
from django.contrib import admin
from django.urls import path
from rest_framework_jwt.views import obtain_jwt_token
from . import views #追記
urlpatterns = [
path('admin/', admin.site.urls),
path('jwt-token/', obtain_jwt_token),
path('ping', views.PingViewSet.as_view()), # 追記
]
$ python manage.py runserver
...別ターミナルで...
$ curl http://localhost:8000/ping -H "Authorization: JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6Imdha3UiLCJleHAiOjE1NTA2MjA2MzYsImVtYWlsIjoicHJvLmdha3VAZ21haWwuY29tIn0.xdEPAe9LvzZVuP1DBHeb8pfWOOiPTmX4K76tHNf15bg"
{"username":"gaku"}
$ curl http://localhost:8000/ping
{"detail":"Authentication credentials were not provided."}
일단 움직였다.
하지만, AUTHENTICATION AND AUTHORIZATION의 user로 jwt token을 발행하는 형태가 되어 있는데 어디 어떤 것일까?
basic 인증이라면 순살로 jwt token을 발행할 수 있는 것을 알았으므로, 앞으로는 OpenID등의 인증도 찾아가고 싶다(´・ω・`)
Reference
이 문제에 관하여(어제 파이썬을 도입 한 도 아마추어가 장고에서 jwt 토큰 인증을 구현할 수 있는지 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gaku3601/items/19f734fedd5fe19e5c77텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)