Pythontr

husonet | Tarih: 04.01.2019

Django Rest Framework JWT

Json web token ile Django REST Framework Authentication işlemi

Djangoda Json web Token ile basic, session ve token dayalı authentication işlemi ayrıca frontend kısmındada Angular ile eşleştirme ve bir user -login page uygulama işlemlerini aşağıda oldukça açık bir dille anlatmaya çalışacağım.


Django REST framework ile token dayalı authentication



Öncelikle yazıma belli başlı terimleri açıklayarak başlayacağım. Ardından Django(Eğer ilk defa django ile proje yapıyorsanız django başlangıç ile başlamanızı öneririm) authentication nasıl yapılır konusunda basit bir uygulama yapacağız.



Authentication nedir? ve neden ihtiyaç duyarız?


Authentication'a neden ihtiyaç duyarız sorusunun en büyük cevabı güvenlik ve doğrulamadır. Kelime manası da zaten kimlik doğrulama olan bu terim herhangi bir client ' in bu websitesi üzerindende olabilir, belli yetkilere sahip bir kullanıcı olarak yetkilerini kullanmak üzere bir servise ulaşabilmesini bir protokol sağlanması işlemidir.Aslında günlük hayatta da her yerde kullandığımız basitçe çipli akbil sistemi gibi bastığınız an sizin kim olduğunuzu ve hangi yetkilere sahip olarak o sisteme ulaşmaya çalıştığınız bilgilerini doğrulamak gibi zaruri işlemlerde kısaca authentication olarak tanımlanır.


Authentication genel olarak : Basic ;Session ve Token Based olarak 3 şekilde kullanılmaktadır :


Basic Authentication : Http protokolü üzerinden yapılan basit authentication işlemidir.Client bir Http isteğini basic kelimesi ve user:password(base64-encoded string şeklinde) bilgilerini içeren bir şekilde header' da gönderir .Ve servis bunu çözümler ve izin verir ancak bu tarz authentication yalnız kullanılması sakıncalıdır(Bilgilerin çözümlenmesi basit olduğundan ). O yüzden sadece HTTPS/SSL mekanizmaları ile beraber kullanılır.


Session Authentication: Bunda ise server kullanıcı için bir session oluşturur. Session id ise bir cookie de kullanıcı browserı üzerinde saklanır. Kullanıcı oturumunu açık tuttuğu müddetçe, cookie sonraki her bir istekle birlikte gönderilir. Ve server session id yi karşılaştırarak depolanan bilgilerin doğruluğuna göre geri bilgi gönderir


Token Based Authentication: Bu tip authentication en çok kullanılan authentication çeşitlerindendir.Token' dayalı sistemde kulanıcı giriş yapmaya çalıştığında bir token key(anahtar) oluşur ve server bunu kayıtlı olan token ile karşılaştırarak doğruluğunu onaylar .Json token ise Json tipinde key ürettiği için Json Web Token olarak anılmaktadır.
Authentication hakkında daha detaylı bilgi almak için authentication'a bakabilirsiniz


Artık basit authentican uygulamamıza başlayalım.Öncelikle aşağıdaki kütüphaneleri yüklememiz lazım



pip install Django
pip install djangorestframework #Restful api oluşturmak için framework yapısını sağlar.
pip install djangorestframework-jwt #Json web Token kütüphanesini yükler

*Not= Bu uygulamada python 2.7 ve üzeri django 1.11 ve üzeri kullanılabilir.


Paketlerimizi yükledikten sonra authentication işlemini aktive etmek için Settings.py a gidip şunları ekleyeceğiz.



REST_FRAMEWORK ={
'DEFAULT_PERMISSION_CLASSES' : (
'rest_framework.permissions.IsAuthenticatedOrReadOnly' ,
),
'DEFAULT_PAGINATION_CLASS' : 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE':6,
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication' ,
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
}

*Not INSTALLED_APPS kısmına 'rest_framework' ü eklemeyi unutmayın.Yoksa framework aktif olmaz



3 tip authentication'ı da birlikte kullanacağız. Bunların ardından Json web Token'ı konfigüre edeceğiz.Yine settings.py 'a gidiyoruz



import datetime as dt
from datetime import timedelta,datetime # importlar en yukarıda tanımlanacak
JWT_AUTH = {
'JWT_ALLOW_REFRESH': True,
'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=3600), #Her token sadece 1 saatliğine geçerli olur.
}

Sonrasında token için gerekli urlleri Urls.py 'da tanımlayalım



from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token

urlpatterns = [
... diğer urller ...
url(r'api-token-auth/', obtain_jwt_token),
url(r'api-token-refresh/', refresh_jwt_token),
]

Buraya kadarki kısım ayarlar ve konfigürasyon kısmıydı artık uygulamaya başlayalım.


*Not uygulama kısmını yakın bir sürede ekleyeceğim.


Sorularınız ve istekleriniz için Linkedin hesabımdan ulaşabilirsiniz