Skill

Flask এবং OAuth Integration

ফ্লাস্ক (Flask) - Web Development

398

OAuth (Open Authorization) হলো একটি নিরাপদ অথেনটিকেশন প্রোটোকল যা ব্যবহারকারীকে তাদের পাসওয়ার্ড শেয়ার না করে তৃতীয় পক্ষের অ্যাপ্লিকেশনকে তাদের অ্যাকাউন্টে অ্যাক্সেস প্রদান করতে সহায়তা করে। OAuth সাধারণত সোশ্যাল মিডিয়া প্ল্যাটফর্ম (যেমন Google, Facebook, GitHub ইত্যাদি) বা অন্যান্য সেবা দিয়ে লগইন করতে ব্যবহৃত হয়। Flask অ্যাপ্লিকেশনগুলিতে OAuth ইন্টিগ্রেশন করতে Flask-OAuthlib বা Authlib প্যাকেজ ব্যবহৃত হয়।

এখানে Flask অ্যাপ্লিকেশনে OAuth ইন্টিগ্রেশন সম্পর্কে বিস্তারিত আলোচনা করা হবে।


Flask-এ OAuth Integration করার ধাপসমূহ

১. প্যাকেজ ইনস্টলেশন

প্রথমে, Flask অ্যাপে OAuth ব্যবহারের জন্য প্রয়োজনীয় লাইব্রেরি ইনস্টল করতে হবে। এখানে আমরা Authlib ব্যবহার করব, কারণ এটি নতুন এবং আধুনিক একটি লাইব্রেরি।

pip install Flask-Authlib

এছাড়া, যদি আপনি Google বা GitHub OAuth ব্যবহার করতে চান, তাহলে requests_oauthlib প্যাকেজও ইনস্টল করতে হতে পারে।

pip install requests_oauthlib

২. Google OAuth ইন্টিগ্রেশন উদাহরণ

এখানে Google OAuth ব্যবহার করে Flask অ্যাপ্লিকেশন তৈরি করা হবে। Google API থেকে OAuth 2.0 কনফিগারেশন কীভাবে পেতে হয় তা দেখানো হবে।

ধাপ ১: Google Developer Console থেকে OAuth ক্লায়েন্ট আইডি তৈরি করা
  1. Google Developer Console এ লগইন করুন।
  2. একটি নতুন প্রজেক্ট তৈরি করুন।
  3. API & Services > OAuth consent screen এ গিয়ে প্রয়োজনীয় তথ্য পূর্ণ করুন।
  4. Credentials > Create Credentials > OAuth 2.0 Client IDs এ গিয়ে একটি OAuth ক্লায়েন্ট আইডি তৈরি করুন।
  5. Redirect URI: আপনি যে URL-এ রিডাইরেক্ট হতে চান তা দেবেন (যেমন http://localhost:5000/login/callback)
ধাপ ২: Flask অ্যাপে Google OAuth ইন্টিগ্রেশন
from flask import Flask, redirect, url_for, session
from authlib.integrations.flask_client import OAuth
import os

app = Flask(__name__)

# Flask app এর জন্য কনফিগারেশন সেট করুন
app.secret_key = os.environ.get('SECRET_KEY') or 'a_random_secret_key'
app.config['SESSION_COOKIE_NAME'] = 'your_session_cookie_name'

# OAuth সেটআপ
oauth = OAuth(app)
google = oauth.register(
    name='google',
    client_id='YOUR_GOOGLE_CLIENT_ID',
    client_secret='YOUR_GOOGLE_CLIENT_SECRET',
    authorize_url='https://accounts.google.com/o/oauth2/auth',
    authorize_params=None,
    access_token_url='https://accounts.google.com/o/oauth2/token',
    refresh_token_url=None,
    client_kwargs={'scope': 'openid profile email'},
)

@app.route('/')
def homepage():
    return 'Welcome to the OAuth Integration Example!'

@app.route('/login')
def login():
    # Google OAuth authorize URL-এ রিডাইরেক্ট করুন
    redirect_uri = url_for('auth', _external=True)
    return google.authorize_redirect(redirect_uri)

@app.route('/login/callback')
def auth():
    # Google OAuth থেকে অ্যাক্সেস টোকেন পেতে
    token = google.authorize_access_token()
    user = google.parse_id_token(token)
    
    # ইউজারের তথ্য দেখান (ইমেইল, নাম ইত্যাদি)
    return f'Hello, {user["name"]}! Your email is {user["email"]}'

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

এখানে:

  • google.authorize_redirect(): Google OAuth authorize URL-এ রিডাইরেক্ট করতে ব্যবহৃত হয়।
  • google.authorize_access_token(): অ্যাক্সেস টোকেন গ্রহণ করে।
  • google.parse_id_token(): ব্যবহারকারীর তথ্য পাওয়া যায়, যেমন নাম এবং ইমেইল।
ধাপ ৩: Flask অ্যাপ চালানো

এখন, Flask অ্যাপ চালানোর জন্য python app.py কমান্ডটি চালান।

ব্রাউজারে http://127.0.0.1:5000/login URL-এ যান এবং Google OAuth দিয়ে লগইন করুন।


৩. GitHub OAuth ইন্টিগ্রেশন উদাহরণ

GitHub OAuth ইন্টিগ্রেশন করতে Authlib প্যাকেজ ব্যবহার করা যাবে। এখানে GitHub OAuth সেটআপ এবং ইন্টিগ্রেশন করার পদক্ষেপ দেওয়া হয়েছে।

ধাপ ১: GitHub Developer Console থেকে OAuth ক্লায়েন্ট আইডি তৈরি করা
  1. GitHub Developer Console এ গিয়ে একটি নতুন OAuth অ্যাপ্লিকেশন তৈরি করুন।
  2. Redirect URI নির্ধারণ করুন (যেমন: http://localhost:5000/login/callback)।
ধাপ ২: Flask অ্যাপে GitHub OAuth ইন্টিগ্রেশন
from flask import Flask, redirect, url_for, session
from authlib.integrations.flask_client import OAuth
import os

app = Flask(__name__)

# Flask app কনফিগারেশন সেট করা
app.secret_key = os.environ.get('SECRET_KEY') or 'a_random_secret_key'
app.config['SESSION_COOKIE_NAME'] = 'your_session_cookie_name'

# OAuth সেটআপ
oauth = OAuth(app)
github = oauth.register(
    name='github',
    client_id='YOUR_GITHUB_CLIENT_ID',
    client_secret='YOUR_GITHUB_CLIENT_SECRET',
    authorize_url='https://github.com/login/oauth/authorize',
    access_token_url='https://github.com/login/oauth/access_token',
    api_base_url='https://api.github.com/',
    client_kwargs={'scope': 'read:user'},
)

@app.route('/')
def homepage():
    return 'Welcome to GitHub OAuth Integration Example!'

@app.route('/login')
def login():
    # GitHub OAuth authorize URL-এ রিডাইরেক্ট করুন
    redirect_uri = url_for('auth', _external=True)
    return github.authorize_redirect(redirect_uri)

@app.route('/login/callback')
def auth():
    # GitHub OAuth থেকে অ্যাক্সেস টোকেন পেতে
    token = github.authorize_access_token()
    user = github.get('user')
    
    # ইউজারের তথ্য দেখান (GitHub ইউজারনেম)
    return f'Hello, {user["login"]}! Your email is {user.get("email", "Not Available")}'

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

এখানে:

  • github.authorize_redirect(): GitHub OAuth authorize URL-এ রিডাইরেক্ট করতে ব্যবহৃত হয়।
  • github.get('user'): GitHub API থেকে ব্যবহারকারীর তথ্য আনা হয়।
ধাপ ৩: Flask অ্যাপ চালানো

এখন, Flask অ্যাপ চালানোর জন্য python app.py কমান্ডটি চালান।

ব্রাউজারে http://127.0.0.1:5000/login URL-এ যান এবং GitHub OAuth দিয়ে লগইন করুন।


Flask-এ OAuth ইন্টিগ্রেশন খুবই সহজ। Authlib বা Flask-OAuthlib লাইব্রেরি ব্যবহার করে আপনি বিভিন্ন সেবা যেমন Google, GitHub, Facebook, এবং আরও অনেক প্ল্যাটফর্মের মাধ্যমে OAuth 2.0 অথেনটিকেশন ইন্টিগ্রেট করতে পারেন। এই পদ্ধতি ব্যবহারকারীকে তাদের সোশ্যাল মিডিয়া অ্যাকাউন্ট দিয়ে নিরাপদে লগইন করতে সাহায্য করে এবং একই সাথে আপনার অ্যাপ্লিকেশনকে সহজভাবে অথেনটিকেটেড ব্যবহারকারী পরিচালনা করতে সক্ষম করে।

Content added By

OAuth2 হলো একটি আধুনিক অথেনটিকেশন প্রোটোকল যা ব্যবহারকারীদের জন্য তৃতীয় পক্ষের সেবা (যেমন গুগল, ফেসবুক, টুইটার) ব্যবহার করে লগইন করার সুযোগ দেয়, যাতে তারা তাদের ডেটা নিরাপদে শেয়ার করতে পারেন। Flask-এ OAuth2 ইন্টিগ্রেট করতে Flask-OAuthlib বা Authlib ব্যবহার করা হয়। OAuth2 এর মাধ্যমে তৃতীয় পক্ষের অথেনটিকেশন (Third-Party Authentication) অ্যাপ্লিকেশনগুলিতে ব্যবহারকারী লগইন সিস্টেম সহজ এবং নিরাপদ করে তোলে।

এই টিউটোরিয়ালে Flask-এ OAuth2 এর মাধ্যমে তৃতীয় পক্ষের অথেনটিকেশন কিভাবে ইন্টিগ্রেট করা যায়, তা দেখানো হবে।


Flask-এ OAuth2 সিস্টেম সেটআপ

OAuth2 সিস্টেম সেটআপ করার জন্য Authlib লাইব্রেরি ব্যবহার করা হবে, যা Flask-এর সাথে সহজেই ইন্টিগ্রেট হতে পারে এবং গুগল, ফেসবুক, টুইটার ইত্যাদি তৃতীয় পক্ষের অথেনটিকেশন সিস্টেমকে সমর্থন করে।

ধাপ ১: Authlib ইনস্টল করা

প্রথমে Authlib ইনস্টল করতে হবে:

pip install authlib

ধাপ ২: Flask অ্যাপ্লিকেশন তৈরি এবং OAuth2 কনফিগারেশন

Flask অ্যাপ তৈরি করতে হবে এবং OAuth2 কনফিগারেশন সেট করতে হবে। এখানে গুগল OAuth2 দিয়ে লগইন সিস্টেম তৈরি করা হবে।

from flask import Flask, redirect, url_for, session
from authlib.integrations.flask_client import OAuth

app = Flask(__name__)

# Secret Key এর মাধ্যমে সেশন সুরক্ষা
app.secret_key = 'random_secret_key'

# OAuth কনফিগারেশন সেট করা (গুগল OAuth)
app.config['GOOGLE_CLIENT_ID'] = 'YOUR_GOOGLE_CLIENT_ID'
app.config['GOOGLE_CLIENT_SECRET'] = 'YOUR_GOOGLE_CLIENT_SECRET'
app.config['GOOGLE_DISCOVERY_URL'] = 'https://accounts.google.com/.well-known/openid-configuration'

# OAuth ইনিশিয়ালাইজ করা
oauth = OAuth(app)
google = oauth.register(
    'google',
    client_id=app.config['GOOGLE_CLIENT_ID'],
    client_secret=app.config['GOOGLE_CLIENT_SECRET'],
    authorize_url='https://accounts.google.com/o/oauth2/auth',
    authorize_params=None,
    access_token_url='https://accounts.google.com/o/oauth2/token',
    access_token_params=None,
    refresh_token_url=None,
    refresh_token_params=None,
    client_kwargs={'scope': 'openid profile email'},
)

# হোম পেজ রাউট
@app.route('/')
def home():
    return 'Hello, please <a href="/login">login with Google</a>'

# গুগল OAuth2 লগইন রাউট
@app.route('/login')
def login():
    # গুগল OAuth2 এর মাধ্যমে রিডিরেক্ট করতে
    redirect_uri = url_for('authorize', _external=True)
    return google.authorize_redirect(redirect_uri)

# গুগল OAuth2 অথোরাইজেশন কলে ব্যাক রাউট
@app.route('/authorize')
def authorize():
    # গুগল থেকে অ্যাক্সেস টোকেন পেতে
    token = google.authorize_access_token()
    
    # ইউজার ইনফো ফেচ করতে
    user = google.parse_id_token(token)
    
    # সেশনে ইউজারের নাম স্টোর করা
    session['user'] = user['name']
    
    return f'Hello, {session["user"]}'

# ইউজার লগআউট রাউট
@app.route('/logout')
def logout():
    session.pop('user', None)
    return redirect(url_for('home'))

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

এখানে:

  • google = oauth.register(): গুগল OAuth ক্লায়েন্ট কনফিগারেশন।
  • google.authorize_redirect(): ইউজারকে গুগল OAuth লগইন পেজে রিডিরেক্ট করার জন্য।
  • google.authorize_access_token(): গুগল থেকে অ্যাক্সেস টোকেন নেওয়ার জন্য।
  • google.parse_id_token(): গুগল থেকে পাওয়া টোকেন দিয়ে ইউজারের ইনফরমেশন (যেমন নাম) নেওয়া।

ধাপ ৩: গুগল API কনসোল থেকে ক্লায়েন্ট আইডি এবং সিক্রেট সংগ্রহ করা

গুগল OAuth2 সিস্টেমে এক্সেস করতে হলে আপনাকে গুগল API কনসোল থেকে ক্লায়েন্ট আইডি এবং সিক্রেট সংগ্রহ করতে হবে।

  1. Google Developer Console এ যান।
  2. একটি নতুন প্রজেক্ট তৈরি করুন।
  3. APIs & Services > Credentials এ গিয়ে Create Credentials নির্বাচন করুন।
  4. OAuth 2.0 Client IDs নির্বাচন করুন এবং ওয়েব অ্যাপের জন্য কনফিগার করুন।
  5. রিডিরেক্ট URI হিসেবে http://127.0.0.1:5000/authorize দিন।
  6. ক্লায়েন্ট আইডি এবং ক্লায়েন্ট সিক্রেট সংগ্রহ করুন এবং আপনার Flask অ্যাপে যুক্ত করুন।

ধাপ ৪: রান এবং টেস্ট করা

এখন, Flask অ্যাপটি চালু করুন:

python app.py

এটি আপনাকে লোকালহোস্টে (যেমন http://127.0.0.1:5000) চলবে এবং আপনি গুগল লগইন লিঙ্ক দেখতে পাবেন। গুগল অ্যাকাউন্ট দিয়ে লগইন করার পর, আপনি সেশনে ইউজারের নাম দেখতে পারবেন।


৫. প্রোডাকশন পরিবেশে OAuth2 ব্যবহার

আপনি যখন আপনার অ্যাপ্লিকেশন প্রোডাকশন পরিবেশে চালাবেন, তখন আপনাকে redirect_uri এবং Google API Console তে সঠিক প্রোডাকশন URI দিতে হবে। এছাড়া সিক্রেট কীগুলি পরিবেশ ভেরিয়েবল বা নিরাপদ পদ্ধতিতে সংরক্ষণ করতে হবে।


Flask-এ OAuth2 এর মাধ্যমে Third-Party Authentication ইন্টিগ্রেট করা খুবই সহজ। Authlib লাইব্রেরির সাহায্যে আপনি গুগল, ফেসবুক, টুইটার ইত্যাদি OAuth সিস্টেম ব্যবহার করে ব্যবহারকারী লগইন সিস্টেম খুব সহজে বাস্তবায়ন করতে পারেন। Flask OAuth2 ব্যবহারের মাধ্যমে তৃতীয় পক্ষের সাথে অথেনটিকেশন সম্পন্ন করা নিরাপদ এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করে।

Content added By

Flask-Dance হলো একটি Flask এক্সটেনশন যা আপনাকে OAuth ব্যবহার করে বিভিন্ন সেবা যেমন Google, Facebook, GitHub ইত্যাদির মাধ্যমে Authentication সহজে ইন্টিগ্রেট করতে সহায়তা করে। এই এক্সটেনশনটি বিভিন্ন OAuth প্রোভাইডারের সাথে সংযোগ স্থাপন করতে সাহায্য করে, যার ফলে ব্যবহারকারীদের জন্য তৃতীয় পক্ষের সেবা যেমন Google বা Facebook এর মাধ্যমে লগ ইন করার সুবিধা প্রদান করা হয়।

এখানে, আমরা Flask-Dance ব্যবহার করে Google এবং Facebook Authentication কিভাবে সেটআপ এবং ব্যবহার করা হয় তা দেখব।


১. Flask-Dance ইনস্টলেশন

প্রথমে Flask-Dance এবং Flask-OAuthlib ইনস্টল করতে হবে:

pip install flask flask-dance flask-sqlalchemy

২. Google Authentication Setup

ধাপ ১: Google API Console-এ প্রজেক্ট তৈরি করা

  1. Google API Console এ যান।
  2. একটি নতুন প্রজেক্ট তৈরি করুন।
  3. OAuth consent screen সঠিকভাবে পূর্ণ করুন।
  4. Credentials থেকে OAuth 2.0 Client IDs তৈরি করুন।
  5. Redirect URI হিসেবে http://localhost:5000/google ব্যবহার করুন।
  6. Client ID এবং Client Secret সংগ্রহ করুন।

ধাপ ২: Flask অ্যাপে Google Authentication ইন্টিগ্রেট করা

from flask import Flask, redirect, url_for, session
from flask_dance.contrib.google import make_google_blueprint, google
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.secret_key = 'your_secret_key'

# Flask-SQLAlchemy ডাটাবেস কনফিগারেশন
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
db = SQLAlchemy(app)

# Google OAuth কনফিগারেশন
google_bp = make_google_blueprint(client_id='your-client-id',
                                  client_secret='your-client-secret',
                                  redirect_to='google_login')
app.register_blueprint(google_bp, url_prefix='/google')

@app.route('/')
def home():
    if not google.authorized:
        return redirect(url_for('google.login'))
    resp = google.get('/plus/v1/people/me')
    assert resp.ok, resp.text
    user_info = resp.json()
    return f'Hello, {user_info["displayName"]}!'

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

এখানে:

  • make_google_blueprint: এটি Google OAuth 2.0 কনফিগারেশন সেটআপ করে।
  • google.get('/plus/v1/people/me'): ব্যবহারকারীর তথ্য গ্রহণ করার জন্য Google API কল করা হয়।
  • google.authorized: Google এর মাধ্যমে ইউজার অথেনটিকেট করা হয়েছে কিনা চেক করা হয়।

ধাপ ৩: অ্যাপ চালানো

python app.py

এটি http://localhost:5000/ এ গিয়ে Google লগইন পেজ প্রদর্শন করবে।


৩. Facebook Authentication Setup

ধাপ ১: Facebook Developer Console-এ প্রজেক্ট তৈরি করা

  1. Facebook Developer Console এ যান।
  2. একটি নতুন প্রজেক্ট তৈরি করুন এবং Facebook Login কনফিগারেশন করুন।
  3. App ID এবং App Secret সংগ্রহ করুন।
  4. Redirect URI হিসেবে http://localhost:5000/facebook ব্যবহার করুন।

ধাপ ২: Flask অ্যাপে Facebook Authentication ইন্টিগ্রেট করা

from flask import Flask, redirect, url_for, session
from flask_dance.contrib.facebook import make_facebook_blueprint, facebook
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.secret_key = 'your_secret_key'

# Flask-SQLAlchemy ডাটাবেস কনফিগারেশন
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
db = SQLAlchemy(app)

# Facebook OAuth কনফিগারেশন
facebook_bp = make_facebook_blueprint(client_id='your-app-id',
                                      client_secret='your-app-secret',
                                      redirect_to='facebook_login')
app.register_blueprint(facebook_bp, url_prefix='/facebook')

@app.route('/')
def home():
    if not facebook.authorized:
        return redirect(url_for('facebook.login'))
    resp = facebook.get('/me')
    assert resp.ok, resp.text
    user_info = resp.json()
    return f'Hello, {user_info["name"]}!'

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

এখানে:

  • make_facebook_blueprint: এটি Facebook OAuth 2.0 কনফিগারেশন সেটআপ করে।
  • facebook.get('/me'): ব্যবহারকারীর তথ্য গ্রহণ করার জন্য Facebook API কল করা হয়।
  • facebook.authorized: Facebook এর মাধ্যমে ইউজার অথেনটিকেট করা হয়েছে কিনা চেক করা হয়।

ধাপ ৩: অ্যাপ চালানো

python app.py

এটি http://localhost:5000/ এ গিয়ে Facebook লগইন পেজ প্রদর্শন করবে।


৪. অ্যাপ্লিকেশন রিডাইরেকশন এবং সিকিউরিটি

প্রতিটি OAuth প্রদানকারী (যেমন Google বা Facebook) এক্সেস টোকেন এবং ব্যবহারকারীর তথ্য প্রাপ্তির জন্য callback URL বা redirect URI ব্যবহার করে। এটি অ্যাপ্লিকেশনের নিরাপত্তা নিশ্চিত করতে গুরুত্বপূর্ণ, যাতে কেউ আপনার অ্যাপ্লিকেশন থেকে অনুমোদিতভাবে ব্যবহারকারীর ডেটা অ্যাক্সেস করতে না পারে।

Flask-Dance Security

  • Flask-Dance ব্যবহারের মাধ্যমে OAuth কনফিগারেশনের জন্য সিকিউরিটি ফিচারগুলি নিরাপদ থাকে।
  • আপনি অ্যাপ্লিকেশনের secret_key এর মাধ্যমে সেশন ম্যানেজমেন্ট এবং ক্রস-সাইট রিকোয়েস্ট ফরজারি (CSRF) থেকে সুরক্ষা নিশ্চিত করতে পারেন।

Flask-Dance ব্যবহার করে Google এবং Facebook Authentication ইন্টিগ্রেট করা সহজ এবং কার্যকর। এটি Flask অ্যাপ্লিকেশনকে ব্যবহারকারীদের সোশ্যাল মিডিয়া অ্যাকাউন্টের মাধ্যমে লগ ইন করার সুযোগ দেয়, যা একটি খুবই জনপ্রিয় বৈশিষ্ট্য। Flask-Dance এর মাধ্যমে আপনি OAuth 2.0 পদ্ধতির সাথে সহজেই ইন্টিগ্রেট করতে পারেন এবং ব্যবহারকারীর তথ্য নিরাপদে সংগ্রহ করতে পারেন।

Content added By

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...