Access Tokens এবং API Authorization

Flask এবং OAuth Integration - ফ্লাস্ক (Flask) - Web Development

267

Flask-এ Access Tokens এবং API Authorization ব্যবহৃত হয় ওয়েব অ্যাপ্লিকেশনের সিকিউরিটি এবং অথেনটিকেশন নিশ্চিত করতে। API-এর নিরাপত্তা নিশ্চিত করার জন্য অ্যাক্সেস টোকেন এবং অথোরাইজেশন ব্যবস্থাপনা গুরুত্বপূর্ণ। সাধারণত JWT (JSON Web Tokens) বা OAuth প্রোটোকল ব্যবহার করে Flask অ্যাপে এই ফিচার বাস্তবায়ন করা হয়।

এই টিউটোরিয়ালে Flask অ্যাপে Access Tokens এবং API Authorization ব্যবহারের প্রক্রিয়া দেখানো হবে, যেখানে JWT টোকেন ব্যবহৃত হবে।


১. JWT (JSON Web Token) কী?

JWT হলো একটি ওপেন স্ট্যান্ডার্ড যা দুটি পক্ষের মধ্যে নিরাপদভাবে ডেটা ট্রান্সফার করতে ব্যবহৃত হয়। এটি সাধারণত ব্যবহারকারীদের অথেনটিকেশন এবং অথোরাইজেশনের জন্য ব্যবহৃত হয়। JWT একটি এনকোডেড স্ট্রিং যা ব্যবহারকারীর তথ্য ধারণ করে, এবং সাধারণত HTTP হেডারের মাধ্যমে API রিকোয়েস্টের সাথে পাঠানো হয়।


২. JWT Token ব্যবহারের জন্য Flask অ্যাপ তৈরি করা

ধাপ ১: প্রয়োজনীয় লাইব্রেরি ইনস্টল করা

Flask-এ JWT টোকেন ব্যবহারের জন্য Flask-JWT-Extended ইনস্টল করতে হবে।

pip install flask-jwt-extended

ধাপ ২: Flask অ্যাপ কনফিগারেশন

এখন, Flask অ্যাপ তৈরির মাধ্যমে JWT টোকেন ব্যবহারের কনফিগারেশন সেট করা হবে।

from flask import Flask, jsonify, request
from flask_jwt_extended import JWTManager, create_access_token, jwt_required, get_jwt_identity

app = Flask(__name__)

# Flask-JWT-Extended কনফিগারেশন
app.config['SECRET_KEY'] = 'supersecretkey'  # গোপন কী সেট করুন
jwt = JWTManager(app)

# একটি লগইন রুট তৈরি করা
@app.route('/login', methods=['POST'])
def login():
    username = request.json.get('username', None)
    password = request.json.get('password', None)
    
    # একটি সহজ অথেনটিকেশন চেক (প্রোডাকশনে এটি অবশ্যই এনক্রিপ্ট করা হবে)
    if username != 'admin' or password != 'password':
        return jsonify({"msg": "Bad username or password"}), 401
    
    # JWT টোকেন তৈরি করা
    access_token = create_access_token(identity=username)
    return jsonify(access_token=access_token)

# একটি প্রটেক্টেড রুট তৈরি করা (অথেনটিকেশন প্রয়োজন)
@app.route('/protected', methods=['GET'])
@jwt_required()
def protected():
    # ব্যবহারকারীর তথ্য বের করা
    current_user = get_jwt_identity()
    return jsonify(logged_in_as=current_user), 200

if __name__ == "__main__":
    app.run(debug=True)

ব্যাখ্যা:

  • JWTManager(app): JWT ম্যানেজার ইনিশিয়ালাইজ করা।
  • create_access_token(identity=username): username কে ব্যবহার করে একটি নতুন Access Token তৈরি করা।
  • jwt_required(): এটি একটি ডেকোরেটর যা নিশ্চিত করে যে রিকোয়েস্টে JWT টোকেন উপস্থিত থাকতে হবে, তা না হলে রিকোয়েস্ট গ্রহণ করা হবে না।
  • get_jwt_identity(): টোকেনের মধ্যে থেকে ব্যবহারকারীর identity (এখানে username) বের করা।

৩. Access Token তৈরি এবং ব্যবহার

লগইন রিকোয়েস্ট:

  1. POST রিকোয়েস্ট /login রুটে পাঠান, যেখানে username এবং password প্রেরণ করতে হবে:

    POST http://127.0.0.1:5000/login
    Content-Type: application/json
    {
      "username": "admin",
      "password": "password"
    }
    
  2. টোকেন রেসপন্স: সফল লগইনের পর, আপনি একটি JWT টোকেন পাবেন:

    {
      "access_token": "your_jwt_token_here"
    }
    

প্রোটেক্টেড রুটে JWT টোকেন ব্যবহার:

  1. GET রিকোয়েস্ট /protected রুটে পাঠান, এবং হেডারে Authorization হিসেবে Bearer Token যুক্ত করুন:

    GET http://127.0.0.1:5000/protected
    Authorization: Bearer your_jwt_token_here
    
  2. রেসপন্স: যদি টোকেন সঠিক হয়, তবে আপনি ব্যবহারকারী তথ্য সহ একটি সফল রেসপন্স পাবেন:

    {
      "logged_in_as": "admin"
    }
    

৪. JWT Token Expiry (অবধি) সেট করা

Flask-JWT-Extended আপনাকে টোকেনের মেয়াদ (expiry time) সেট করার সুযোগ দেয়, যাতে এটি নির্দিষ্ট সময় পর স্বয়ংক্রিয়ভাবে এক্সপায়ার হয়ে যায়।

from datetime import timedelta

app.config['JWT_ACCESS_TOKEN_EXPIRES'] = timedelta(hours=1)  # এক ঘণ্টা পর টোকেন এক্সপায়ার হবে

এটি আপনার JWT টোকেনের মেয়াদ এক ঘণ্টা করতে সাহায্য করবে।


৫. Refresh Token ব্যবহার করা

JWT টোকেনের মেয়াদ শেষ হলে, Refresh Token ব্যবহার করে আপনি নতুন Access Token পেতে পারেন।

উদাহরণ:

  1. Refresh Token Endpoint:

    from flask_jwt_extended import create_refresh_token, jwt_required, get_jwt_identity, fresh_jwt_required
    
    @app.route('/refresh', methods=['POST'])
    @jwt_required(refresh=True)
    def refresh():
        current_user = get_jwt_identity()
        new_access_token = create_access_token(identity=current_user)
        return jsonify(access_token=new_access_token), 200
    
  2. Refresh Token প্রদান:
    • প্রথমে, Refresh Token তৈরি করতে /login রুটে রিকোয়েস্ট পাঠান।
    • পরবর্তীতে, Refresh Token ব্যবহার করে /refresh রুটে নতুন Access Token পেতে পারেন।

৬. Flask-এ API Authorization

Flask-এ API Authorization সাধারণত Role-Based Authorization বা Permission-Based Authorization ব্যবহৃত হয়, যেখানে বিভিন্ন রোল (Roles) অথবা পারমিশন (Permissions) অনুযায়ী ব্যবহারকারীকে অ্যাক্সেস দেওয়া হয়।

উদাহরণ: Role-Based Authorization

from flask_jwt_extended import jwt_required, get_jwt_identity

@app.route('/admin', methods=['GET'])
@jwt_required()
def admin_access():
    current_user = get_jwt_identity()
    if current_user != 'admin':
        return jsonify({"msg": "Admin access required"}), 403
    return jsonify({"msg": "Welcome admin!"}), 200

এখানে:

  • @jwt_required(): এই রুটে অ্যাক্সেস করতে JWT Token প্রয়োজন।
  • get_jwt_identity(): টোকেন থেকে username বা role শনাক্ত করা হয় এবং সেই অনুযায়ী অ্যাক্সেস চেক করা হয়।

Flask-এ Access Tokens এবং API Authorization ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশন এবং API-কে নিরাপদ রাখতে পারেন। JWT (JSON Web Token) অত্যন্ত কার্যকর একটি পদ্ধতি যা ব্যবহারকারীর অথেনটিকেশন ও অথোরাইজেশন সহজভাবে পরিচালনা করতে সাহায্য করে। Flask-JWT-Extended ব্যবহার করে আপনি সহজেই JWT টোকেন তৈরি, যাচাই, এবং মেয়াদ সমাপ্তি পরিচালনা করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...