Cyber Kraliçe
Kayıtlı Kullanıcı
- JWT (JSON Web Token) nedir ve nasıl çalışır?
- FastAPI ve Django ile JWT kimlik doğrulama süreçleri
- Adım adım uygulamalı rehber ve örnek kodlar
### JWT Nedir?
JSON Web Token (JWT), iki taraf arasında güvenli bir şekilde bilgi iletmek için kullanılan bir açık standarttır. JWT, içerdiği bilgilerin doğruluğunu ve bütünlüğünü sağlamak için dijital imza kullanır. Genellikle kullanıcı kimlik doğrulama süreçlerinde kullanılır; örneğin, bir kullanıcı giriş yaptığında, sunucu ona bir JWT verir ve bu token, daha sonraki isteklerde kimlik doğrulama için kullanılır.
### FastAPI ile JWT Authentication
FastAPI, modern ve hızlı bir Python web çerçevesidir. JWT ile kimlik doğrulama yapmak için aşağıdaki adımları izleyebilirsiniz.
#### 1. Gerekli Kütüphanelerin Yüklenmesi
```bash
pip install fastapi uvicorn pyjwt
```
#### 2. JWT Token Oluşturma
FastAPI uygulamanızda bir endpoint oluşturun. Bu endpoint, kullanıcı adı ve şifre alacak ve doğru ise bir JWT token döndürecektir.
```python
from fastapi import FastAPI, Depends, HTTPException
from pydantic import BaseModel
import jwt
import datetime
app = FastAPI()
SECRETKEY = "yoursecretkey"
class User(BaseModel):
username: str
password: str
def createjwttoken(user: User):
tokendata = {
"sub": user.username,
"exp": datetime.datetime.utcnow() + datetime.timedelta(hours=1)
}
token = jwt.encode(tokendata, SECRETKEY, algorithm="HS256")
return token
@app.post("/token")
def login(user: User):
if user.username == "test" and user.password == "test": # Basit bir doğrulama
return {"accesstoken": createjwttoken(user)}
raise HTTPException(statuscode=401, detail="Invalid credentials")
```
#### 3. Token ile Korunan Endpoint Oluşturma
Şimdi, JWT token ile korunan bir endpoint oluşturun. Bu endpoint, yalnızca geçerli bir token ile erişilebilir.
```python
def getcurrentuser(token: str = Depends(oauth2scheme)):
try:
payload = jwt.decode(token, SECRETKEY, algorithms=["HS256"])
return payload["sub"]
except jwt.PyJWTError:
raise HTTPException(statuscode=401, detail="Invalid token")
@app.get("/users/me")
def readusersme(currentuser: str = Depends(getcurrentuser)):
return {"username": currentuser}
```
### Django ile JWT Authentication
Django, popüler bir Python web framework'üdür. Django'da JWT kimlik doğrulama yapmak için `djangorestframework-simplejwt` kütüphanesini kullanabilirsiniz.
#### 1. Gerekli Kütüphanelerin Yüklenmesi
```bash
pip install djangorestframework djangorestframework-simplejwt
```
#### 2. Ayarları Yapma
`settings.py` dosyanıza `RESTFRAMEWORK` ve `SIMPLEJWT` ayarlarını ekleyin:
```python
RESTFRAMEWORK = {
'DEFAULTAUTHENTICATIONCLASSES': (
'restframeworksimplejwt.authentication.JWTAuthentication',
),
}
SIMPLEJWT = {
'ACCESSTOKENLIFETIME': timedelta(minutes=5),
'REFRESHTOKENLIFETIME': timedelta(days=1),
}
```
#### 3. URL Yönlendirmeleri
`urls.py` dosyanıza JWT token oluşturma ve yenileme URL'lerini ekleyin:
```python
from django.urls import path
from restframeworksimplejwt.views import TokenObtainPairView, TokenRefreshView
urlpatterns = [
path('api/token/', TokenObtainPairView.asview(), name='tokenobtainpair'),
path('api/token/refresh/', TokenRefreshView.asview(), name='tokenrefresh'),
]
```
#### 4. Korunan Endpoint Oluşturma
JWT ile korunan bir endpoint oluşturmak için, view fonksiyonunuza `IsAuthenticated` sınıfını ekleyebilirsiniz:
```python
from restframework.permissions import IsAuthenticated
from restframework.views import APIView
from restframework.response import Response
class UserView(APIView):
permissionclasses = [IsAuthenticated]
def get(self, request):
return Response({"message": "Welcome, {}".format(request.user.username)})
```
### Sonuç
JWT, kullanıcı kimliğini güvenli bir şekilde doğrulamak için etkili bir yöntemdir. FastAPI ve Django ile JWT kullanarak, uygulamalarınızı güvenli hale getirebilir ve kullanıcı deneyimini artırabilirsiniz. Uygulama ve örnek kodlar ile birlikte, kendi projelerinizde bu yöntemleri kolayca uygulayabilirsiniz.