Rails এর মাধ্যমে API Authentication এবং Authorization

RESTful API এবং Rails - রুবি অন রেইল (Ruby on Rails) - Web Development

308

API Authentication এবং Authorization হলো সিকিউরিটি ফিচার, যা ওয়েব অ্যাপ্লিকেশনে ব্যবহারকারী বা ক্লায়েন্টদের সঠিকভাবে শনাক্ত করতে এবং তাদের অনুমোদিত অ্যাকশনগুলোর উপর নিয়ন্ত্রণ রাখতে ব্যবহৃত হয়। Ruby on Rails-এ এই ফিচার দুটি কার্যকরভাবে ব্যবহার করতে বিভিন্ন পদ্ধতি রয়েছে। এখানে আমরা Authentication এবং Authorization এর মধ্যে পার্থক্য, এবং Rails-এ এগুলি বাস্তবায়ন করার উপায় নিয়ে আলোচনা করবো।


Authentication এবং Authorization এর পার্থক্য

  • Authentication: এটি প্রক্রিয়া যার মাধ্যমে সিস্টেম নিশ্চিত করে যে ব্যবহারকারী বা ক্লায়েন্ট যে ব্যক্তি বা সত্ত্বা হিসেবে দাবি করছে, সেটিই। সাধারণত, এটি login বা token-based সিস্টেমের মাধ্যমে বাস্তবায়িত হয়।
  • Authorization: এটি নিশ্চিত করে যে একটি অটেন্টিকেটেড (প্রমাণীকৃত) ব্যবহারকারী কী কাজ করতে পারে। অর্থাৎ, একজন ব্যবহারকারী নির্দিষ্ট একটি রিসোর্স বা অ্যাকশনের জন্য অনুমোদিত কি না, সেটি যাচাই করা হয়।

Rails-এ সাধারণত Authentication এর জন্য JWT (JSON Web Tokens) বা Devise ব্যবহৃত হয়, এবং Authorization এর জন্য Pundit বা CanCanCan এর মতো গেম লাইব্রেরি ব্যবহার করা হয়।


API Authentication in Ruby on Rails

API Authentication সাধারণত টোকেন ভিত্তিক হয়। এটি API রিকোয়েস্টে একটি ইউনিক টোকেন পাঠানোর মাধ্যমে ব্যবহারকারী বা ক্লায়েন্টের পরিচয় শনাক্ত করে। Rails-এ API Authentication কার্যকরভাবে সেট আপ করার জন্য জনপ্রিয় দুটি পদ্ধতি হলো JWT Authentication এবং Devise Token Auth

১. JWT Authentication

JWT (JSON Web Token) একটি ওপেন স্ট্যান্ডার্ড, যা ক্লায়েন্ট এবং সার্ভারের মধ্যে নিরাপদভাবে তথ্য শেয়ার করতে ব্যবহৃত হয়। Rails-এ JWT Authentication ব্যবহার করার জন্য কিছু সাধারণ পদক্ষেপ নিচে আলোচনা করা হলো।

Step 1: gem 'jwt' ইন্সটল করা

প্রথমে, আপনার Gemfilejwt জেমটি যোগ করুন:

gem 'jwt'

এরপর bundle install চালান।

Step 2: Authentication Controller তৈরি করা

আপনি একটি AuthenticationController তৈরি করতে পারেন, যা রিসিভ করা হবে emailpassword দিয়ে এবং JWT টোকেন রিটার্ন করবে।

class AuthenticationController < ApplicationController
  def login
    user = User.find_by(email: params[:email])
    if user && user.authenticate(params[:password])
      token = encode_token(user_id: user.id)
      render json: { token: token }, status: :ok
    else
      render json: { error: 'Invalid credentials' }, status: :unauthorized
    end
  end

  private

  def encode_token(payload)
    JWT.encode(payload, Rails.application.secret_key_base)
  end
end

এখানে, encode_token মেথডে JWT টোকেন তৈরি করা হচ্ছে এবং login মেথডে ব্যবহারকারীর emailpassword যাচাই করা হচ্ছে। যদি সঠিক হয়, তবে JWT টোকেন রিটার্ন হবে।

Step 3: Token Verification Middleware তৈরি করা

টোকেন যাচাইয়ের জন্য একটি middleware তৈরি করতে হবে, যা API রিকোয়েস্টের মধ্যে Authorization হেডারে পাঠানো JWT টোকেন যাচাই করবে।

class ApplicationController < ActionController::API
  def authenticate_request
    begin
      @decoded = JWT.decode(request.headers['Authorization'].split(' ').last, Rails.application.secret_key_base)
      @current_user = User.find(@decoded[0]['user_id'])
    rescue JWT::DecodeError
      render json: { error: 'Not Authenticated' }, status: :unauthorized
    end
  end
end

এখানে, authenticate_request মেথডটি Authorization হেডারে পাঠানো JWT টোকেনকে ডিকোড করে এবং ব্যবহারকারীকে শনাক্ত করে। যদি টোকেন বৈধ না হয়, তবে unauthorized স্ট্যাটাস রিটার্ন করা হবে।

Step 4: Token Authentication এর মাধ্যমে রিসোর্স প্রটেক্ট করা

এখন আপনি যেকোনো রিসোর্সে authenticate_request মেথডটি ব্যবহার করে প্রমাণীকরণের প্রয়োজনে প্রোটেক্ট করতে পারেন।

class ProductsController < ApplicationController
  before_action :authenticate_request

  def index
    products = Product.all
    render json: products
  end
end

এটি ProductsController এর সব অ্যাকশনের জন্য JWT টোকেন যাচাই করবে। শুধুমাত্র বৈধ টোকেন সহ রিকোয়েস্ট আসলে ডেটা রিটার্ন হবে।


API Authorization in Ruby on Rails

Authorization নিশ্চিত করে যে একজন ব্যবহারকারী নির্দিষ্ট রিসোর্স বা অ্যাকশনে অ্যাক্সেস পেতে পারবেন কিনা। Rails-এ সাধারণত Pundit বা CanCanCan লাইব্রেরি ব্যবহার করা হয়।

২. Pundit Authorization

Pundit একটি গেম লাইব্রেরি, যা রোল-বেসড বা পলিসি-বেসড অনুমোদন বাস্তবায়ন করতে সাহায্য করে। এটি একটি সহজ এবং পরিষ্কার উপায়ে আপনার অ্যাপ্লিকেশনের অনুমোদন ব্যবস্থা তৈরি করতে পারে।

Step 1: gem 'pundit' ইন্সটল করা

প্রথমে আপনার Gemfile-এ pundit জেমটি যোগ করুন:

gem 'pundit'

তারপর bundle install চালান।

Step 2: Pundit Policy তৈরি করা

ধরা যাক, আপনার Product রিসোর্স রয়েছে, এবং আপনি চান যে শুধুমাত্র অনুমোদিত ব্যবহারকারীরা পণ্য দেখতে পারবে। তাহলে প্রথমে একটি Policy ক্লাস তৈরি করতে হবে।

# app/policies/product_policy.rb
class ProductPolicy < ApplicationPolicy
  def show?
    user.admin? || user == record.user
  end
end

এখানে, show? মেথডে আমরা চেক করছি যে, ব্যবহারকারী admin কি না অথবা পণ্যটির মালিক কি না।

Step 3: Controller এ Authorization ব্যবহার করা

আপনি আপনার কন্ট্রোলারে authorize মেথডটি ব্যবহার করে ব্যবহারকারীর অনুমোদন চেক করতে পারেন।

class ProductsController < ApplicationController
  before_action :authenticate_request
  before_action :set_product, only: [:show]

  def show
    authorize @product
    render json: @product
  end

  private

  def set_product
    @product = Product.find(params[:id])
  end
end

এখানে, authorize @product মেথডটি ProductPolicy ক্লাসের show? মেথডটিকে কল করে অনুমোদন চেক করবে। যদি ব্যবহারকারী অনুমোদিত না হন, তাহলে এটি 403 Forbidden রেসপন্স ফেরত দিবে।


সারমর্ম

Ruby on Rails-এ API Authentication এবং Authorization ব্যবস্থাপনা সিকিউরিটি নিশ্চিত করতে অত্যন্ত গুরুত্বপূর্ণ। Authentication এর জন্য সাধারণত JWT বা Devise Token Auth ব্যবহার করা হয়, যেখানে ব্যবহারকারীরা তাদের পরিচয় প্রমাণ করতে একটি টোকেন পেয়ে থাকে। অন্যদিকে, Authorization নিশ্চিত করতে Pundit বা CanCanCan ব্যবহার করা হয়, যা রিসোর্স ভিত্তিক অনুমোদন প্রদান করে। এই দুটি প্রক্রিয়া একসাথে ব্যবহার করে আপনি একটি নিরাপদ এবং স্কেলেবল API তৈরি করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...