Flask, bir Python web framework’ü olarak, basit yapısı ve esnekliğiyle çoğu geliştiriciye hitap ediyor. Ancak, verilerinizi güvende tutmak için doğru güvenlik önlemlerini almak kritik önem taşıyor. Bugün, Token Authentication’ı kullanarak bu güvenlik açığını nasıl kapatacağımızı öğreneceğiz.
Token Authentication Nedir?
Token Authentication, modern web uygulamalarında kullanıcı doğrulaması için yaygın olarak kullanılan bir tekniktir. Kullanıcı, giriş yaptıktan sonra bir "token" alır. Bu token, kullanıcının kimliğini doğrulamak için her istekte kullanılır. Token’lar genellikle JWT (JSON Web Token) formatında olur ve sistemdeki her istekle birlikte sunucuya gönderilir.
Flask'ta Token Authentication Nasıl Kurulur?
Flask ile API güvenliğini sağlamak için öncelikle bir JWT token kullanacağız. Flask uygulamanıza bu işlevi entegre etmek için birkaç adımı takip edeceğiz.
Adım 1: Flask-JWT-Extended Kütüphanesini Kurun
İlk adım, `Flask-JWT-Extended` kütüphanesini yüklemek. Bu kütüphane, Flask uygulamanızda JWT token kullanmanızı kolaylaştırır. Terminalde şu komutu çalıştırarak yükleyebilirsiniz:
pip install Flask-JWT-Extended
Adım 2: JWT Şifreleme Anahtarını Belirleyin
Sunucunuzun güvenliğini sağlamak için bir şifreleme anahtarı belirlemeniz gerekecek. Bu anahtar, token’ları şifrelemek ve doğrulamak için kullanılır. Flask uygulamanıza şu şekilde ekleyebilirsiniz:
from flask import Flask
from flask_jwt_extended import JWTManager
app = Flask(__name__)
app.config["JWT_SECRET_KEY"] = "your_jwt_secret_key" # Anahtarınızı buraya yazın
jwt = JWTManager(app)
Adım 3: Kullanıcı Giriş İşlemi ve Token Oluşturma
Kullanıcı giriş yaptıktan sonra ona bir JWT token vereceğiz. İşte token’ı oluşturma örneği:
from flask import request, jsonify
from flask_jwt_extended import create_access_token
@app.route("/login", methods=["POST"])
def login():
username = request.json.get("username", None)
password = request.json.get("password", None)
# Kullanıcı doğrulama kodu (örneğin, veritabanı sorgusu)
if username == "admin" and password == "password123":
access_token = create_access_token(identity=username)
return jsonify(access_token=access_token), 200
return jsonify(message="Bad credentials"), 401
Adım 4: Güvenli Endpoints Oluşturma
Token’ı başarıyla oluşturduktan sonra, API’yi güvenli hale getirmek için, sadece geçerli token ile erişilebilen endpoints yaratacağız. Aşağıdaki gibi bir endpoint’e sahip olabilirsiniz:
from flask_jwt_extended import jwt_required, get_jwt_identity
@app.route("/protected", methods=["GET"])
@jwt_required()
def protected():
current_user = get_jwt_identity()
return jsonify(logged_in_as=current_user), 200
Bu adımda, `/protected` endpoint’i, kullanıcıdan geçerli bir token talep eder. Token geçerli ise, kullanıcıya erişim sağlanır. Eğer token geçersizse, 401 Unauthorized hatası dönecektir.
En İyi Uygulamalar
Token Authentication kullanırken göz önünde bulundurmanız gereken birkaç best practice vardır:
- Güçlü Anahtar Kullanımı: JWT şifreleme anahtarınızı güçlü bir şekilde seçin ve düzenli olarak değiştirin.
- Token Süresi: Token’ların süresi dolacak şekilde ayar yapın. Süresi dolmuş token’lar otomatik olarak geçersiz olacaktır.
- Refresh Token: Uzun süreli oturumlar için, refresh token kullanarak erişim token’larını yenileyebilirsiniz.
- CORS ve Rate Limiting: API’nizi sadece izin verdiğiniz domainlere açın ve aşırı istekleri engellemek için rate limiting kullanın.
Sonuç
Flask ile REST API’lerinizi güvence altına almak, doğru araçları kullanarak oldukça basit hale gelebilir. Token Authentication, modern web uygulamalarında kullanıcıların verilerini güvenli bir şekilde yönetmenin etkili bir yoludur. Flask, bu süreci kolaylaştırmak için mükemmel araçlar sunuyor. Unutmayın, güvenlik hiçbir zaman göz ardı edilmemelidir!