TurboGears এবং API Authentication
TurboGears একটি জনপ্রিয় Python ওয়েব ফ্রেমওয়ার্ক যা দ্রুত এবং সহজভাবে অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে। TurboGears মূলত MVC (Model-View-Controller) আর্কিটেকচার অনুসরণ করে এবং ওয়েব অ্যাপ্লিকেশনগুলির জন্য অত্যন্ত শক্তিশালী ফিচার সরবরাহ করে। এর মধ্যে একটি গুরুত্বপূর্ণ অংশ হলো API Authentication, যা নিশ্চিত করে যে শুধুমাত্র অথেনটিকেটেড ব্যবহারকারীরা API ব্যবহার করতে পারবেন।
API Authentication সাধারণত তিনটি প্রধান ধরনের হয়ে থাকে:
- Basic Authentication
- Token-Based Authentication
- OAuth Authentication
এই নিবন্ধে আমরা TurboGears-এ API Authentication এবং Rate Limiting কিভাবে সেটআপ করা যায় তা আলোচনা করব।
১. API Authentication in TurboGears
API Authentication নিশ্চিত করে যে শুধু অথেনটিকেটেড ইউজারই API রিসোর্স অ্যাক্সেস করতে পারবে। TurboGears সাধারণত secure মডিউল ব্যবহার করে API Authentication প্রক্রিয়া সম্পন্ন করে।
Token-Based Authentication (JWT)
Token-based authentication, বিশেষ করে JWT (JSON Web Tokens), আজকাল খুবই জনপ্রিয়। এর মাধ্যমে আপনি ব্যবহারকারীদের লগ ইন বা সাইন আপ করার পর একটি টোকেন প্রদান করেন, যা পরে API রিকোয়েস্টের মাধ্যমে যাচাই করা হয়।
TurboGears API Authentication Example with JWT:
- JWT টোকেন জেনারেট করার জন্য একটি utility তৈরি করা:
import jwt
import datetime
SECRET_KEY = "your_secret_key"
def generate_token(user_id):
expiration_time = datetime.datetime.utcnow() + datetime.timedelta(hours=1)
payload = {
"user_id": user_id,
"exp": expiration_time
}
return jwt.encode(payload, SECRET_KEY, algorithm="HS256")
- API রিকোয়েস্টের মাধ্যমে টোকেন যাচাই করা:
from tg import expose, request, abort
from functools import wraps
import jwt
SECRET_KEY = "your_secret_key"
def require_auth(func):
@wraps(func)
def decorated_function(*args, **kwargs):
token = request.headers.get('Authorization')
if not token:
abort(401, "Missing Token")
try:
payload = jwt.decode(token, SECRET_KEY, algorithms=["HS256"])
except jwt.ExpiredSignatureError:
abort(401, "Token Expired")
except jwt.InvalidTokenError:
abort(401, "Invalid Token")
return func(*args, **kwargs)
return decorated_function
class RootController(object):
@expose('json')
@require_auth
def some_protected_resource(self):
return {"message": "This is a protected resource"}
এখানে, JWT টোকেন যাচাই করার জন্য @require_auth ডেকোরেটর ব্যবহার করা হয়েছে। যখনই একটি রিকোয়েস্ট আসে, এটি টোকেনটি চেক করবে এবং ভ্যালিড না হলে 401 (Unauthorized) রেসপন্স দিবে।
২. API Rate Limiting in TurboGears
API Rate Limiting হল একটি নিরাপত্তা ফিচার যা API-তে নির্দিষ্ট পরিমাণ রিকোয়েস্ট সীমিত করে। এটি ব্যবহারকারীদের API-কে অত্যাধিক ব্যবহার করতে বাধা দেয়, যা সার্ভারকে ওভারলোড হতে বাধা দেয় এবং সিস্টেমের স্থিতিশীলতা বজায় রাখে।
TurboGears এ API Rate Limiting সেটআপ করার জন্য আপনি werkzeug বা flask-limiter প্যাকেজ ব্যবহার করতে পারেন, যেগুলি সাধারণত Python ওয়েব অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয়।
Rate Limiting Example in TurboGears using Flask-Limiter
flask-limiterইনস্টল করা: প্রথমে,flask-limiterপ্যাকেজটি ইনস্টল করতে হবে:pip install flask-limiter- Rate Limiting এর সেটআপ:
from flask import Flask, jsonify
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
app = Flask(__name__)
limiter = Limiter(get_remote_address, app=app)
@app.route('/api/resource')
@limiter.limit("5 per minute") # Limit the endpoint to 5 requests per minute
def resource():
return jsonify(message="This is a rate-limited resource")
if __name__ == '__main__':
app.run()
এখানে, flask-limiter ব্যবহার করে আমরা /api/resource রুটের জন্য প্রতি মিনিটে ৫টি রিকোয়েস্ট সীমাবদ্ধ করেছি।
TurboGears এ Rate Limiting:
TurboGears-এ সরাসরি Rate Limiting সমর্থন নেই, তবে আপনি Flask বা Werkzeug এর মতো লাইব্রেরি ব্যবহার করে এই ফিচারটি সহজেই ইন্টিগ্রেট করতে পারেন। আপনি একটি ম্যানুয়াল ইমপ্লিমেন্টেশনও করতে পারেন যা IP ভিত্তিক রিকোয়েস্ট কাউন্ট ট্র্যাক করে।
সারাংশ
TurboGears ফ্রেমওয়ার্কে API Authentication এবং Rate Limiting কনফিগারেশন অত্যন্ত গুরুত্বপূর্ণ। Token-based Authentication যেমন JWT দিয়ে API রিকোয়েস্ট অথেনটিকেট করা হয়। Rate Limiting সিস্টেমের পারফরম্যান্স এবং নিরাপত্তা নিশ্চিত করতে সহায়ক। আপনি flask-limiter বা werkzeug লাইব্রেরির মাধ্যমে Rate Limiting এবং JWT অথেনটিকেশন কার্যকরীভাবে ইন্টিগ্রেট করতে পারেন TurboGears-এ।
Read more