Authentication (অথেনটিকেশন) একটি ওয়েব অ্যাপ্লিকেশনের জন্য অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি নিশ্চিত করে যে শুধুমাত্র বৈধ ব্যবহারকারীরা অ্যাপ্লিকেশনের বিভিন্ন ফিচার অ্যাক্সেস করতে পারে। কেকপিএইচপি (CakePHP) তে Authentication সিস্টেম সেটআপ করতে বিভিন্ন প্লাগইন ব্যবহৃত হয়, যেমন OAuth এবং JWT (JSON Web Token)। এই দুটি জনপ্রিয় অথেনটিকেশন মেথড ওয়েব অ্যাপ্লিকেশনে সিকিউরিটি বৃদ্ধি করতে সহায়ক।
১. OAuth Authentication
OAuth (Open Authorization) একটি জনপ্রিয় অথেনটিকেশন এবং অথোরাইজেশন প্রোটোকল যা ব্যবহারকারীদের তাদের একাউন্ট থেকে তথ্য নিরাপদে শেয়ার করার সুযোগ দেয়। এটি সাধারণত থার্ড-পার্টি অ্যাপ্লিকেশনের জন্য ব্যবহৃত হয়, যেমন গুগল, ফেসবুক, এবং গিটহাব লগইন। OAuth ব্যবহার করে আপনি ব্যবহারকারীর তথ্য এবং অ্যাক্সেস পারমিশনগুলি নিরাপদে শেয়ার করতে পারেন।
১.১. OAuth এর কাজের পদ্ধতি
OAuth সাধারণত তিনটি প্রধান অংশে বিভক্ত:
- Resource Owner (ব্যবহারকারী): যিনি লগইন করেন এবং অ্যাক্সেস অনুমতি দেন।
- Client (অ্যাপ্লিকেশন): যে অ্যাপ্লিকেশন OAuth মাধ্যমে অনুমতি নেয়।
- Authorization Server (অথরাইজেশন সার্ভার): যেখানে অ্যাক্সেস টোকেন তৈরি এবং যাচাই করা হয়।
OAuth এর মাধ্যমে, যখন ব্যবহারকারী তাদের তৃতীয় পক্ষের একাউন্টের মাধ্যমে লগইন করেন, তখন অ্যাপ্লিকেশনটি ব্যবহারকারীর অনুমতি নিয়ে এক্সেস টোকেন পায়, যা পরবর্তীতে API বা রিসোর্স অ্যাক্সেস করতে ব্যবহৃত হয়।
১.২. CakePHP তে OAuth Authentication ইমপ্লিমেন্ট করা
CakePHP তে OAuth ইন্টিগ্রেট করতে সাধারণত SocialAuth বা OAuth2 প্লাগইন ব্যবহার করা হয়। নিচে কিছু ধাপ দেওয়া হলো যা OAuth Authentication সেটআপে সাহায্য করবে।
প্রথমে, CakePHP এর জন্য
OAuth2বাSocialAuthপ্লাগইন ইনস্টল করুন।composer require cakephp/oauth2কনফিগারেশন ফাইলে OAuth2 সিস্টেম কনফিগার করুন:
// config/app.php 'OAuth2' => [ 'client_id' => 'your-client-id', 'client_secret' => 'your-client-secret', 'redirect_uri' => 'your-redirect-uri', 'authorization_url' => 'https://provider.com/oauth/authorize', 'token_url' => 'https://provider.com/oauth/token', ]কন্ট্রোলারে OAuth অথেনটিকেশন প্রক্রিয়া ইমপ্লিমেন্ট করুন:
// src/Controller/SocialAuthController.php use Cake\Controller\Controller; class SocialAuthController extends Controller { public function login() { $oauth = new OAuth2Service($this->request->getData()); $token = $oauth->getAccessToken(); // Token ব্যবহার করে ব্যবহারকারী ডাটা সংগ্রহ } }
এখানে, আপনি OAuth সার্ভিস ব্যবহার করে ব্যবহারকারী ডেটা ফেচ করতে পারেন এবং ব্যবহারকারীকে আপনার সিস্টেমে লগইন করতে পারবেন।
২. JWT Authentication
JWT (JSON Web Token) একটি স্ট্যান্ডার্ড যা ওয়েব অ্যাপ্লিকেশনগুলোর মধ্যে সিকিউরড অথেনটিকেশন এবং অথোরাইজেশন কন্ট্রোল সরবরাহ করে। JWT মূলত একটি এনকোডেড টোকেন হিসেবে কাজ করে, যা ব্যবহারকারীর সেশন সম্পর্কে তথ্য ধারণ করে এবং এটি সার্ভার ও ক্লায়েন্টের মধ্যে শেয়ার করা যায়।
২.১. JWT এর কাজের পদ্ধতি
JWT তে তিনটি অংশ থাকে:
- Header: টোকেনের ধরন এবং সিগনেচার এলগোরিদম নির্দেশ করে।
- Payload: ব্যবহারকারী সম্পর্কিত তথ্য বা ক্লেইম ধারণ করে।
- Signature: টোকেনের নিরাপত্তা নিশ্চিত করতে একটি সিগনেচার তৈরি করা হয়।
JWT সাধারণত একটি HTTP হেডারে অ্যাপ্লিকেশন সার্ভারের কাছে পাঠানো হয় এবং তা ব্যবহারকারীকে যাচাই করতে ব্যবহৃত হয়।
২.২. CakePHP তে JWT Authentication ইমপ্লিমেন্ট করা
CakePHP তে JWT Authentication প্লাগইন হিসেবে ADmad/cakephp-jwt-auth ব্যবহার করা হয়। এটি JWT টোকেনের মাধ্যমে ব্যবহারকারী অথেনটিকেশন সম্পাদন করে।
প্রথমে
cakephp-jwt-authপ্লাগইন ইনস্টল করুন।composer require admad/cakephp-jwt-authকনফিগারেশন ফাইলে JWT সেটআপ করুন:
// config/app.php 'Jwt' => [ 'secret_key' => 'your-secret-key', 'algorithm' => 'HS256', // JWT সিগনেচার এলগোরিদম ]কন্ট্রোলারে JWT অথেনটিকেশন প্রক্রিয়া ইমপ্লিমেন্ট করুন:
// src/Controller/UsersController.php namespace App\Controller; use Cake\Controller\Controller; use Firebase\JWT\JWT; class UsersController extends Controller { public function login() { // ইউজার নাম এবং পাসওয়ার্ড যাচাই $user = $this->Users->find('all')->where(['email' => $this->request->getData('email')])->first(); if ($user && password_verify($this->request->getData('password'), $user->password)) { // JWT টোকেন তৈরি করা $key = 'your-secret-key'; $payload = [ 'sub' => $user->id, 'email' => $user->email, 'exp' => time() + 3600 // এক ঘণ্টার জন্য টোকেন বৈধ ]; $jwt = JWT::encode($payload, $key); // টোকেন রিটার্ন করা $this->set(compact('jwt')); } else { // ভুল ক্রেডেনশিয়াল $this->response->statusCode(401); $this->set(compact('message')); } } }
এখানে:
JWT::encode(): ব্যবহারকারীর তথ্য দিয়ে একটি JWT টোকেন তৈরি করা হয়।$payload: টোকেনের মধ্যে ব্যবহারকারীর আইডি, ইমেইল এবং এক্সপায়ারি টাইম উল্লেখ করা হয়।
- ক্লায়েন্ট সাইডে, এই JWT টোকেনটি হেডারে পাঠানো হয় এবং সার্ভার সেটি যাচাই করে। উদাহরণস্বরূপ, একটি API রিকোয়েস্টে:
Authorization: Bearer <jwt_token>
৩. OAuth এবং JWT এর মধ্যে পার্থক্য
৩.১. OAuth:
- OAuth মূলত থার্ড-পার্টি অথেনটিকেশন ব্যবহৃত হয় (যেমন গুগল, ফেসবুক লগইন)।
- ব্যবহারকারীর তথ্য শেয়ার করার জন্য এক্সেস টোকেন ব্যবহার করে।
- ব্যবহারকারীর অ্যাক্সেস পারমিশন সীমিত থাকে এবং এটি সময়ের সাথে মেয়াদ উত্তীর্ণ হতে পারে।
৩.২. JWT:
- JWT নিজেই একটি সিকিউরড টোকেন যা সার্ভার ও ক্লায়েন্টের মধ্যে এক্সচেঞ্জ হয়।
- এটি স্ট্যান্ডার্ড JSON ফর্ম্যাটে তথ্য পাঠায় এবং এনকোড/ডিকোড করা হয়।
- টোকেন একবার তৈরি হলে, এটি নির্দিষ্ট সময় পর্যন্ত কার্যকর থাকে এবং সার্ভার সাইডে স্টোর করা হয় না।
CakePHP তে Authentication প্লাগইন ব্যবহারের মাধ্যমে আপনি বিভিন্ন অথেনটিকেশন পদ্ধতি যেমন OAuth এবং JWT ইমপ্লিমেন্ট করতে পারেন। OAuth সাধারণত থার্ড-পার্টি লগইন সিস্টেমের জন্য ব্যবহৃত হয়, যেখানে JWT একটি সিকিউরড টোকেন ভিত্তিক অথেনটিকেশন সিস্টেম প্রদান করে। CakePHP তে এই পদ্ধতিগুলো সহজেই ব্যবহার করা সম্ভব এবং এগুলি অ্যাপ্লিকেশন সিকিউরিটি ও ইউজার এক্সপেরিয়েন্স উন্নত করতে গুরুত্বপূর্ণ ভূমিকা পালন করে।
Read more