Skill

JSON Web Tokens (JWT)

Java Technologies - জেসন (JSON)
126
126

JSON Web Tokens (JWT) একটি স্ট্যান্ডার্ড (RFC 7519) যা JSON অবজেক্ট ব্যবহার করে নিরাপদভাবে তথ্য আদান-প্রদান করার জন্য ডিজাইন করা হয়েছে। JWT সাধারণত ব্যবহারকারী প্রমাণীকরণ (authentication) এবং অথরাইজেশন (authorization) এর জন্য ব্যবহৃত হয়, বিশেষত ওয়েব অ্যাপ্লিকেশন এবং API সিস্টেমে। এটি একটি কমপ্যাক্ট, স্বাধীন এবং নিরাপদ উপায়ে ডেটা সংরক্ষণ এবং প্রেরণ করতে সহায়তা করে।

JWT সাধারণত ৩টি অংশ দিয়ে গঠিত:

  1. Header: এই অংশটি JWT এর প্রকার এবং সিগনেচার অ্যালগরিদম নির্ধারণ করে। সাধারণত এটি HS256 বা RS256 অ্যালগরিদমের মাধ্যমে সাইন করা হয়।
  2. Payload: এখানে ডেটা বা claims থাকে। Claims হল এমন তথ্য যা JWT-তে অন্তর্ভুক্ত থাকে (যেমন, ব্যবহারকারীর আইডি বা ভূমিকা)।
  3. Signature: এটি JWT এর নিরাপত্তা নিশ্চিত করে। সিগনেচারটি Header এবং Payload এর উপর ভিত্তি করে তৈরি হয় এবং এটি একটি সিক্রেট কিপ বা পাবলিক/প্রাইভেট কী পেয়ার ব্যবহার করে সাইন করা হয়।

JWT এর গঠন


<Header>.<Payload>.<Signature>
  • Header: Base64Url এ এনকোড করা
  • Payload: Base64Url এ এনকোড করা
  • Signature: Base64Url এ এনকোড করা

JWT এর প্রধান সুবিধাসমূহ


  1. কমপ্যাক্ট: JWT খুব ছোট এবং কমপ্যাক্ট, এটি URL, HTTP হেডার অথবা Cookie এর মাধ্যমে নিরাপদভাবে পাঠানো যায়।
  2. স্বতন্ত্র: JWT অ্যাপ্লিকেশন বা সার্ভারগুলির মধ্যে স্বতন্ত্রভাবে প্রক্রিয়া করা যায়, এটি বহুমাত্রিক সিস্টেমে কাজ করার জন্য উপযুক্ত।
  3. নিরাপদ: JWT সিগনেচার দ্বারা নিরাপদ হয়, যাতে কেউ JWT টোকেন পরিবর্তন করতে না পারে।
  4. লং-টার্ম অথরাইজেশন: এটি সার্ভার-সাইড সেশন ম্যানেজমেন্ট ছাড়াই ব্যবহারকারীকে অথরাইজ করার জন্য ব্যবহার করা যায়।

Java-তে JWT ব্যবহার করার জন্য প্রয়োজনীয় লাইব্রেরি


Java-তে JWT ব্যবহার করতে জনপ্রিয় লাইব্রেরি হল:

  • jjwt: একটি জনপ্রিয় এবং সহজ JWT লাইব্রেরি যা Java-তে JWT তৈরি এবং যাচাই করার জন্য ব্যবহৃত হয়।
  • Java JWT: এটি JWT প্রক্রিয়া করার জন্য একটি আরেকটি জনপ্রিয় লাইব্রেরি।

আপনি Maven দিয়ে jjwt লাইব্রেরি ইনস্টল করতে পারেন:

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.11.5</version>
</dependency>

Java-তে JWT তৈরি এবং যাচাই করার উদাহরণ


1. JWT তৈরি করা

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

public class JwtExample {
    public static void main(String[] args) {
        // Secret key for signing JWT
        String secretKey = "mySecretKey";

        // Create JWT token
        String jwt = Jwts.builder()
                .setSubject("user123")  // Subject (claim)
                .setIssuedAt(new Date())  // Issue date
                .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60))  // Expiration date (1 hour)
                .signWith(SignatureAlgorithm.HS256, secretKey)  // Sign the JWT with HMAC SHA-256
                .compact();

        System.out.println("Generated JWT: " + jwt);
    }
}

2. JWT যাচাই করা

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.SignatureException;

public class JwtVerificationExample {
    public static void main(String[] args) {
        String secretKey = "mySecretKey";
        String token = "<INSERT_YOUR_JWT_HERE>";

        try {
            Claims claims = Jwts.parser()
                    .setSigningKey(secretKey)
                    .parseClaimsJws(token)  // Parse and verify JWT
                    .getBody();

            // Extract claims
            String subject = claims.getSubject();
            Date expiration = claims.getExpiration();
            
            System.out.println("Subject: " + subject);
            System.out.println("Expiration Date: " + expiration);
        } catch (SignatureException e) {
            System.out.println("Invalid token signature");
        }
    }
}

JWT-এ কিছু সাধারণ Claims


  1. sub (Subject): সাধারণত JWT এর মালিক (ব্যবহারকারী) এর আইডি ধারণ করে।
  2. iat (Issued At): যখন টোকেন তৈরি হয়েছে তা ধারণ করে।
  3. exp (Expiration Time): টোকেনের মেয়াদ শেষ হওয়ার সময় নির্দেশ করে।
  4. aud (Audience): টোকেনটি কাদের জন্য তৈরি, তার একটি নির্দেশিকা।

JWT এর ব্যবহার ক্ষেত্রসমূহ


  1. ব্যবহারকারী প্রমাণীকরণ (Authentication): যখন ব্যবহারকারী লগইন করেন, তখন JWT টোকেন প্রদান করা হয় এবং তা ব্যবহারকারীর পরবর্তী রিকোয়েস্টে পাঠানো হয়।
  2. অথরাইজেশন (Authorization): JWT টোকেন ব্যবহার করে ব্যবহারকারীর অ্যাক্সেস নিয়ন্ত্রণ করা যায়।
  3. সর্বত্র ডিস্ট্রিবিউটেড সিস্টেমে ব্যবহৃত: ওয়েব সার্ভিস এবং API এ নিরাপদভাবে তথ্য প্রেরণ করতে JWT ব্যবহার করা হয়, যা ওয়েব সার্ভার এবং ক্লায়েন্টের মধ্যে তথ্য বিনিময় সহজ করে।

JWT এর সুবিধা এবং সীমাবদ্ধতা


সুবিধা

  1. স্বতন্ত্র: এটি সার্ভার-সাইড স্টোরেজ ছাড়াই কাজ করে।
  2. সিকিউরিটি: JWT সিগনেচার দ্বারা নিরাপদ, যা ডেটা পরিবর্তন হতে বাধা দেয়।
  3. কমপ্যাক্ট: JWT খুব ছোট এবং URL-তে ব্যবহার করা যায়।

সীমাবদ্ধতা

  1. পাসওয়ার্ড সংরক্ষণে অদ্বিতীয়তা: JWT একবার একটি ব্যবহারকারী লগইন হলে, তার পরবর্তী ট্রান্সমিশনগুলোতে ব্যবহার করা হয়, যদি এটি একবার লিক হয়ে যায় তবে নিরাপত্তা ঝুঁকি থাকতে পারে।
  2. জটিলতার সৃষ্টি: বড় এবং জটিল অ্যাপ্লিকেশন বা API গুলোর জন্য JWT টোকেনের ব্যবস্থাপনা কিছুটা জটিল হতে পারে।

JSON Web Token (JWT) একটি শক্তিশালী টুল যা নিরাপদ তথ্য আদান-প্রদান এবং অথরাইজেশন ব্যবস্থাপনায় অত্যন্ত কার্যকর। Java তে JWT তৈরি এবং যাচাই করার জন্য jjwt এবং Java JWT লাইব্রেরি অত্যন্ত জনপ্রিয়। JWT ব্যবহার করে আপনি ওয়েব অ্যাপ্লিকেশন এবং API গুলির মধ্যে নিরাপদ ডেটা আদান-প্রদান সহজে করতে পারেন।

Content added By

JWT কি এবং কিভাবে কাজ করে?

61
61

JWT (JSON Web Token) হল একটি ওপেন স্ট্যান্ডার্ড (RFC 7519) যা ক্লায়েন্ট এবং সার্ভারের মধ্যে নিরাপদভাবে তথ্য আদান-প্রদান করতে ব্যবহৃত হয়। এটি একটি টোকেন ভিত্তিক অথেন্টিকেশন প্রযুক্তি, যা মূলত RESTful API এবং Single Page Applications (SPA) এর ক্ষেত্রে ব্যবহৃত হয়। JWT একটি সাইন করা এবং এনকোড করা স্ট্রিং যা বিভিন্ন অংশের মাধ্যমে তথ্য ধারণ করে, এবং এটি সার্ভার এবং ক্লায়েন্টের মধ্যে নিরাপদভাবে তথ্য ট্রান্সফার করতে ব্যবহৃত হয়।

JWT এর মূল উপাদানসমূহ:

JWT তিনটি অংশে বিভক্ত:

  1. Header (হেডার)
  2. Payload (পে-লোড)
  3. Signature (সিগনেচার)

JWT এর স্ট্রাকচার

JWT সাধারণত তিনটি অংশে বিভক্ত থাকে, এবং প্রতিটি অংশ একটি ডেলিমিটার দ্বারা আলাদা করা হয়। এটি এমন একটি স্ট্রিং যা header.payload.signature ফরম্যাটে থাকে।

<Header>.<Payload>.<Signature>

1. Header (হেডার):

  • হেডার সাধারণত দুটি অংশে বিভক্ত:
    1. টোকেনের ধরন (typ): সাধারণত JWT থাকে।
    2. এনকোডিং এলগরিদম (alg): সাধারণত HS256 বা RS256 থাকে।

উদাহরণ:

{
  "alg": "HS256",
  "typ": "JWT"
}

2. Payload (পে-লোড):

  • পে-লোডের মধ্যে Claims থাকে, যা ব্যবহারকারীর তথ্য বা টোকেনের সাথে সম্পর্কিত ডেটা ধারণ করে। Claims হল তিন ধরনের:
    1. Registered Claims: যেমন iss (issuer), exp (expiration time), sub (subject) ইত্যাদি।
    2. Public Claims: আপনার নিজস্ব কাস্টম ডেটা, যা আপনি ট্রান্সফার করতে পারেন।
    3. Private Claims: ক্লায়েন্ট এবং সার্ভারের মধ্যে নির্দিষ্ট তথ্য।

উদাহরণ:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

3. Signature (সিগনেচার):

  • সিগনেচার অংশটি টোকেনটির নিরাপত্তা নিশ্চিত করে। এটি Header এবং Payload কে সিক্রেট কী বা পাবলিক কী দিয়ে সাইন করে তৈরি করা হয়।
  • উদাহরণস্বরূপ, একটি হ্যাশিং এলগরিদম (যেমন HS256) ব্যবহার করে সিগনেচার তৈরি করা হয়:
    HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

এই সিগনেচারটি পরে টোকেনের খ্যাতি এবং সততা নিশ্চিত করার জন্য ব্যবহৃত হয়।


JWT কিভাবে কাজ করে?


JWT ব্যবহার করা হয় ব্যবহারকারীর অথেন্টিকেশন এবং অথরাইজেশনের জন্য। এটি বিশেষত Stateless Authentication-এর জন্য উপকারী, যেখানে সার্ভার কোন সেশন বা ইউজার স্টেট ট্র্যাক করে না। নিম্নলিখিত পদক্ষেপগুলো দিয়ে JWT সাধারণত কাজ করে:

1. লগইন এবং JWT তৈরি করা:

  • ব্যবহারকারী তার ইউজারনেম এবং পাসওয়ার্ড দিয়ে লগইন করে।
  • সার্ভার ব্যবহারকারীর পরিচয় যাচাই করে এবং একটি JWT তৈরি করে।
  • JWT-তে ইউজারের তথ্য (যেমন, user ID, role, অথবা অন্যান্য claims) এবং একটি সিক্রেট কী দিয়ে সাইন করা হয়।
  • সার্ভার এই JWT ব্যবহারকারীর কাছে ফেরত পাঠায়।

2. JWT দিয়ে অথরাইজেশন:

  • পরবর্তী রিকোয়েস্টের জন্য, ব্যবহারকারী তার JWT টোকেনকে HTTP হেডারে Authorization: Bearer <JWT> আকারে পাঠায়।
  • সার্ভার এই JWT কে ভ্যালিডেট করে এবং টোকেনের মধ্যে থাকা claims এর ভিত্তিতে অ্যাক্সেস প্রদান করে।

3. JWT এর ভ্যালিডেশন:

  • সার্ভার JWT টোকেনটির Signature অংশ পরীক্ষা করে সুরক্ষা নিশ্চিত করে।
  • যদি সিগনেচার এবং পে-লোডের মধ্যে কোনও অমিল থাকে, তবে সার্ভার রিকোয়েস্টটি অগ্রাহ্য করবে।
  • JWT এর exp claim চেক করে নিশ্চিত করা হয় যে টোকেনটি মেয়াদ উত্তীর্ণ হয়নি।

4. JWT টোকেনের মেয়াদ:

  • JWT সাধারণত একটি exp (expiration) claim রাখে, যা টোকেনের মেয়াদ নির্ধারণ করে।
  • মেয়াদ উত্তীর্ণ হলে, ব্যবহারকারীকে আবার লগইন করতে বলা হয় এবং নতুন JWT তৈরি করা হয়।

JWT এর সুবিধা


  1. Stateless Authentication: JWT-তে কোনও সেশন স্টোরেজ দরকার হয় না। সার্ভার সেশন ট্র্যাক না করেও ব্যবহারকারীকে অথেন্টিকেট করতে পারে।
  2. Scalability: যেহেতু সার্ভার সেশন ট্র্যাক করে না, একাধিক সার্ভার ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনটি স্কেল করা সহজ।
  3. Security: JWT এর সিগনেচার অংশটি নিরাপত্তা নিশ্চিত করে, যা ম্যান-ইন-দ্য-মিডল আক্রমণ (MITM) থেকে সুরক্ষা প্রদান করে।
  4. Cross-Domain Authorization: JWT সহজে বিভিন্ন ডোমেইনে অথরাইজেশন ব্যবস্থায় ব্যবহার করা যেতে পারে, যেমন Single Sign-On (SSO) সিস্টেমে।

JWT এর সীমাবদ্ধতা


  1. Token Size: JWT সাধারণত বড় হয়, কারণ এতে ব্যবহারকারীর তথ্য এবং সিগনেচার থাকে। তাই বড় টোকেন ফাইল পাঠানো ব্যান্ডউইথ ব্যবহারে প্রভাব ফেলতে পারে।
  2. Token Expiry: একবার JWT টোকেন তৈরি হলে তার মেয়াদ শেষ হওয়ার আগে এটি বাতিল করা সম্ভব নয়। এর মানে হল যে টোকেনটি একবার মিসইউজ হলে তা কার্যকর হতে পারে যতক্ষণ না এটি মেয়াদ উত্তীর্ণ না হয়।
  3. Security Risks: যদিও JWT সিক্রেট কী দিয়ে সাইন করা থাকে, তবে যদি সিক্রেট কী ফাঁস হয়ে যায়, তবে টোকেনের নিরাপত্তা ক্ষতিগ্রস্ত হতে পারে।

সারাংশ


JWT (JSON Web Token) একটি নিরাপদ টোকেন ভিত্তিক অথেন্টিকেশন পদ্ধতি, যা stateless authentication সমর্থন করে। এটি header, payload, এবং signature নিয়ে তৈরি হয় এবং ক্লায়েন্ট এবং সার্ভারের মধ্যে নিরাপদভাবে তথ্য আদান-প্রদান করতে ব্যবহৃত হয়। JWT ব্যবহার করে Cross-Domain অথরাইজেশন, API অথেন্টিকেশন, এবং Single Sign-On (SSO) সহজ হয়। এটি নিরাপত্তা নিশ্চিত করার জন্য সিগনেচার ব্যবহার করে এবং সার্ভার সেশন ট্র্যাক করার প্রয়োজন ছাড়াই কাজ করতে পারে।

Content added By

JWT এর গঠন: Header, Payload, Signature

72
72

JWT (JSON Web Token) হল একটি স্ট্যান্ডার্ড যা নিরাপদ ডেটা এক্সচেঞ্জ করার জন্য ব্যবহৃত হয়। এটি সাধারণত ব্যবহারকারীর সনাক্তকরণ (authentication) এবং অনুমোদন (authorization) এর জন্য ওয়েব অ্যাপ্লিকেশন বা সার্ভিসেসে ব্যবহৃত হয়। JWT একটি স্ট্রিং হিসেবে থাকে যা তিনটি অংশে বিভক্ত:

  1. Header
  2. Payload
  3. Signature

এগুলির মধ্যে প্রতিটি অংশের একটি নির্দিষ্ট কাজ থাকে এবং JWT এর গঠন ও নিরাপত্তা নিশ্চিত করতে সাহায্য করে।


1. Header (হেডার)

Header অংশটি JWT-এর প্রথম অংশ, যা সাধারণত দুটি উপাদান ধারণ করে:

  • Alg (Algorithm): এটি কী অ্যালগরিদম ব্যবহার করে JWT সাইন করা হবে তা নির্দেশ করে, যেমন HS256, RS256 ইত্যাদি।
  • Typ (Type): এটি JWT-এর টাইপ নির্দেশ করে, যা সাধারণত "JWT" থাকে।

Header সাধারণত Base64Url এ এনকোড করা হয়, যা একটি সংক্ষিপ্ত স্ট্রিং রূপে পরিবর্তিত হয়।

উদাহরণ:

{
  "alg": "HS256",
  "typ": "JWT"
}

এখানে:

  • alg নির্দেশ করছে যে এই JWT কে HMAC SHA-256 অ্যালগরিদম দিয়ে সাইন করা হবে।
  • typ নির্দেশ করছে যে এটি একটি JWT টোকেন।

2. Payload (পে-লোড)

Payload অংশটি JWT এর দ্বিতীয় অংশ, যা মূল ডেটা ধারণ করে। এটি এমন তথ্য বা ক্লেইম (claims) ধারণ করে যা JWT এর ব্যবহারকারী বা অ্যাপ্লিকেশন পেতে চায়।

Payload বিভিন্ন ধরনের claims ধারণ করে:

  • Registered Claims: এটি কিছু পূর্বনির্ধারিত নামকরণ করা ক্লেইম, যেমন iss (issuer), exp (expiration), sub (subject), aud (audience) ইত্যাদি।
  • Public Claims: এগুলি কাস্টম ক্লেইম যেগুলি বিশ্বব্যাপী মানসম্পন্ন হতে পারে, কিন্তু এগুলির নাম থাকতে হবে ইউনিক।
  • Private Claims: এটি কাস্টম ক্লেইম যা শুধু নির্দিষ্ট অ্যাপ্লিকেশন বা সার্ভিসের মধ্যে ব্যবহৃত হয়।

Payload অংশটি Base64Url এ এনকোড করা হয় এবং এটি সাইন করার জন্য ব্যবহার করা হয় না, তবে এটি সর্বসাধারণের জন্য সহজেই ডিকোড করা যেতে পারে।

উদাহরণ:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

এখানে:

  • sub হল টোকেনের সত্ত্বাধিকারীর আইডি।
  • name হল সত্ত্বাধিকারীর নাম।
  • iat হল "issued at" টাইমস্ট্যাম্প, যা নির্দেশ করে কখন টোকেনটি জেনারেট করা হয়েছে।

3. Signature (স্বাক্ষর)

Signature হল JWT এর তৃতীয় এবং শেষ অংশ। এটি টোকেনের নিরাপত্তা নিশ্চিত করে এবং যাচাইয়ের জন্য ব্যবহৃত হয়। Signature তৈরি করতে, প্রথমে Header এবং Payload অংশ দুটি এনকোড করা হয় এবং তারপর একটি secret key (যা জানেন শুধু সার্ভার) ব্যবহার করে সাইনিং অ্যালগরিদমের মাধ্যমে সাইন করা হয়। সাধারণত HMAC SHA-256 অ্যালগরিদম ব্যবহার করা হয়।

সিগনেচার তৈরি করার জন্য নিম্নলিখিত ধাপগুলি অনুসরণ করা হয়:

  1. Header এবং Payload এনকোড করুন।
  2. . (ডট) দিয়ে তাদের মধ্যে যোগ করুন।
  3. secret key এবং সাইনিং অ্যালগরিদম ব্যবহার করে সাইন করুন।

উদাহরণ:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

এখানে:

  • base64UrlEncode Header এবং Payload অংশকে Base64Url এনকোড করে।
  • HMACSHA256 হল সাইনিং অ্যালগরিদম, যা Header, Payload এবং Secret key ব্যবহার করে Signature তৈরি করে।

JWT এর গঠন:

JWT এর গঠন সাধারণত তিনটি অংশে বিভক্ত থাকে:

  1. Header: যা অ্যালগরিদম এবং টোকেন টাইপ উল্লেখ করে।
  2. Payload: যা মূল ডেটা বা ক্লেইম ধারণ করে।
  3. Signature: যা টোকেনের অখণ্ডতা এবং স্বীকৃতির জন্য ব্যবহৃত হয়।

এই তিনটি অংশ একত্রিত হয়ে একটি স্ট্রিং তৈরি করে, যা JWT হিসেবে পরিচিত।

পূর্ণ JWT উদাহরণ:

eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJzdWIiOiAiMTIzNDU2Nzg5MCIsICJuYW1lIjogIkpvaG4gRG9lIiwgImlhdCI6IDE1MTYyMzkwMjJ9.YXpEZHBqQl88FL0OktqlniG93k7fjxnm0v65wyhn_cY

এখানে:

  • প্রথম অংশ হল Header (Base64Url এনকোড করা)।
  • দ্বিতীয় অংশ হল Payload (Base64Url এনকোড করা)।
  • তৃতীয় অংশ হল Signature (Base64Url এনকোড করা এবং সাইন করা)।

কেন JWT ব্যবহার করা হয়?

  1. Stateless Authentication: JWT একটি স্টেটলেস অথেন্টিকেশন টোকেন, যার মানে হল যে সার্ভারে কোনও সেশন স্টোরেজ সংরক্ষণ করতে হয় না। সমস্ত তথ্য JWT তে থাকে, তাই এটি দ্রুত এবং স্কেলেবল।
  2. Cross-Domain Authentication: JWT সহজেই বিভিন্ন ডোমেইনে ব্যবহার করা যেতে পারে, কারণ এটি HTTP হেডারে বা URL প্যারামিটারে সহজে সংযুক্ত করা যায়।
  3. Security: JWT স্বাক্ষরিত হয়, তাই আপনি নিশ্চিত থাকতে পারেন যে ডেটা পরিবর্তিত হয়নি এবং এটি একটি নির্ভরযোগ্য উৎস থেকে এসেছে।
  4. Compact and Self-contained: JWT একক স্ট্রিং আকারে থাকে, যা এটি পাঠানো এবং গ্রহণের জন্য কার্যকরী করে তোলে, বিশেষ করে ওয়েব অ্যাপ্লিকেশনে বা API-তে।

সারাংশ

JWT (JSON Web Token) হল একটি নিরাপদ এবং কার্যকরী পদ্ধতি ডেটা এক্সচেঞ্জ করার জন্য, যা মূলত তিনটি অংশে বিভক্ত:

  • Header: অ্যালগরিদম এবং টোকেন টাইপ।
  • Payload: মূল ডেটা বা ক্লেইম।
  • Signature: ডেটার অখণ্ডতা এবং স্বীকৃতি নিশ্চিত করে।

JWT এর গঠন এবং নিরাপত্তা বৈশিষ্ট্যগুলি এটিকে আধুনিক ওয়েব অ্যাপ্লিকেশনগুলিতে সেশন ম্যানেজমেন্ট, অথেন্টিকেশন এবং অথোরাইজেশন জন্য অত্যন্ত জনপ্রিয় করে তুলেছে।

Content added By

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

55
55

JWT (JSON Web Token) একটি ওপেন স্ট্যান্ডার্ড (RFC 7519) যা নিরাপদভাবে তথ্য বিনিময়ের জন্য ব্যবহৃত হয়। এটি একটি কমপ্যাক্ট এবং স্বাধীন তথ্য কাঠামো যা URL, HTTP হেডার বা কুকি সহ বিভিন্ন মাধ্যমে পাঠানো যেতে পারে। JWT ব্যবহার করে Authentication (প্রমাণীকরণ) এবং Authorization (অনুমোদন) কার্যক্রম নিরাপদে সম্পাদন করা যায়।

JWT এর মৌলিক ধারণা

JWT তিনটি অংশে বিভক্ত:

  1. Header (শিরোনাম): JWT এর প্রথম অংশে অ্যালগরিদম এবং টোকেনের টাইপ সম্পর্কিত তথ্য থাকে। সাধারণত এটি হেডার JSON অবজেক্টে থাকে।
  2. Payload (পেইলোড): JWT এর দ্বিতীয় অংশে তথ্য থাকে যা JSON অবজেক্ট হিসেবে কোড করা হয়। এখানে দাবি (claims) থাকে, যেমন ব্যবহারকারীর পরিচয় এবং তাদের অনুমতি।
  3. Signature (স্বাক্ষর): JWT এর তৃতীয় অংশে একটি ডিজিটাল স্বাক্ষর থাকে, যা সার্ভার বা ক্লায়েন্টের মাধ্যমে সুরক্ষিতভাবে তথ্য যাচাই করতে ব্যবহৃত হয়। এটি secret key দ্বারা তৈরি হয়, এবং এটি JWT এর অখণ্ডতা এবং বৈধতা নিশ্চিত করে।

JWT স্ট্রাকচার

JWT এর স্ট্রাকচার সাধারণত তিনটি অংশে বিভক্ত থাকে:

header.payload.signature

1. Header:

এটি JSON ফরম্যাটে থাকে এবং সাধারণত দুটি ক্ষেত্র থাকে:

  • alg: যেটি হোস্ট বা সার্ভারে ব্যবহৃত অ্যালগরিদম যেমন HMAC SHA256 বা RSA।
  • typ: টোকেনের টাইপ (যেমন JWT)।

উদাহরণ:

{
  "alg": "HS256",
  "typ": "JWT"
}

2. Payload:

পেইলোডে তথ্য থাকে যা claims নামে পরিচিত। claims মূলত ব্যবহারকারীর তথ্য যেমন, নাম, ইমেইল, রোল ইত্যাদি ধারণ করে। এই অংশে তিনটি ধরণের claims থাকে:

  • Registered Claims: পূর্বনির্ধারিত claims যেমন sub (subject), iat (issued at), exp (expiration time)।
  • Public Claims: যে claims ব্যবহারকারীরা স্বতন্ত্রভাবে তৈরি করতে পারেন, তবে সেগুলি অবশ্যই collision থেকে বিরত থাকতে হবে।
  • Private Claims: অ্যাপ্লিকেশন বিশেষ claims, যা অন্যান্য অ্যাপ্লিকেশনের সাথে শেয়ার করা হয় না।

উদাহরণ:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

3. Signature:

স্বাক্ষরটি তৈরি করার জন্য সার্ভার একটি গোপন কী ব্যবহার করে। এটি header এবং payload এর ভিত্তিতে তৈরি হয়, এবং secret key (যদি HMAC ব্যবহার করা হয়) অথবা private key (যদি RSA ব্যবহার করা হয়) দ্বারা সুরক্ষিত থাকে।

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


1. Authentication (প্রমাণীকরণ):

Authentication এর মাধ্যমে ব্যবহারকারী বা ক্লায়েন্টের পরিচয় যাচাই করা হয়। JWT ব্যবহার করে Authentication প্রক্রিয়া নিম্নরূপ:

  1. লগইন রিকোয়েস্ট: ব্যবহারকারী তাদের ইউজারনেম এবং পাসওয়ার্ড দিয়ে লগইন ফর্ম পূর্ণ করে সার্ভারে পাঠায়।
  2. JWT টোকেন জেনারেশন: সার্ভার ইউজারের ক্রেডেনশিয়ালস যাচাই করে এবং সফল হলে JWT টোকেন জেনারেট করে। এই টোকেনটি সাধারণত Authorization header এর মাধ্যমে ক্লায়েন্টে পাঠানো হয়।
  3. টোকেনের ব্যবহার: পরবর্তীতে, ব্যবহারকারী একই টোকেন ব্যবহার করে অ্যাপ্লিকেশনের অন্যান্য অংশে অ্যাক্সেস পেতে পারে। সার্ভার প্রতিটি রিকোয়েস্টে টোকেন যাচাই করে যে এটি বৈধ কিনা।

উদাহরণ: JWT Authentication প্রক্রিয়া

  1. Login Request:

    POST /login
    {
      "username": "john_doe",
      "password": "password123"
    }
    
  2. JWT Token Generation: সার্ভার ব্যবহারকারীর পাসওয়ার্ড যাচাই করে এবং একটি JWT টোকেন রিটার্ন করে:

    {
      "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
    }
    
  3. Authenticated Request: পরবর্তী রিকোয়েস্টে, ব্যবহারকারী তাদের JWT টোকেন সহ Authorization হেডারে পাঠায়:

    GET /user/profile
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
    
  4. Token Verification: সার্ভার JWT টোকেনটি যাচাই করে এবং ব্যবহারকারীকে অ্যাক্সেস প্রদান করে।

2. Authorization (অনুমোদন):

Authorization এর মাধ্যমে ব্যবহারকারীর কাছে নির্দিষ্ট রিসোর্সের অ্যাক্সেস কন্ট্রোল করা হয়। JWT টোকেনের মধ্যে অন্তর্ভুক্ত claims এর ভিত্তিতে অ্যাপ্লিকেশন বিভিন্ন অনুমতি নিয়ন্ত্রণ করতে পারে।

উদাহরণ:

একটি সার্ভার ব্যবহৃত JWT-তে role নামক একটি claim থাকতে পারে যা ব্যবহারকারীর রোল সংরক্ষণ করে। সার্ভার এই claim-এর উপর ভিত্তি করে অনুমতি প্রদান করতে পারে।

Payload Example:

{
  "sub": "1234567890",
  "name": "John Doe",
  "role": "admin",
  "iat": 1516239022
}

এখানে, role: "admin" দেখে সার্ভার বুঝতে পারে যে ব্যবহারকারী প্রশাসনিক অ্যাক্সেস রাখে এবং তাকে অতিরিক্ত অনুমতি দেওয়া যেতে পারে।

JWT Authentication এবং Authorization এর সুবিধা

  1. Stateless Authentication: JWT টোকেনটি সার্ভারে কোনো সেশন ডেটা না রেখে ব্যবহারকারীকে প্রমাণীকৃত করে, ফলে সার্ভারের সেশন ম্যানেজমেন্ট কমে যায়।
  2. Cross-Domain Support: JWT অন্যান্য ডোমেইনে ডেটা এক্সচেঞ্জ করতে সক্ষম।
  3. Scalable: এটি ডিস্ট্রিবিউটেড সিস্টেমে ব্যবহার করা সহজ, কারণ সার্ভারকে কোনো অবস্থায় সেশন ডেটা সংরক্ষণ করতে হয় না।

সারাংশ


JWT (JSON Web Token) হলো একটি নিরাপদ, কমপ্যাক্ট এবং কার্যকর পদ্ধতি যা authentication এবং authorization সম্পাদন করতে ব্যবহৃত হয়। এটি একটি header, payload, এবং signature নিয়ে গঠিত। JWT ক্লায়েন্ট-সার্ভার আর্কিটেকচারে বিশেষভাবে ব্যবহৃত হয় যেখানে সার্ভারকে সেশন ডেটা সংরক্ষণ না করে ব্যবহারকারী প্রমাণীকরণ এবং অনুমোদন নিশ্চিত করতে হয়। JWT টোকেনগুলো সহজভাবে HTTP হেডারের মাধ্যমে পাঠানো যায় এবং এটি CORS সমস্যা ছাড়াই কাজ করতে সক্ষম।

Content added By

JWT এবং JSON এর মধ্যে সম্পর্ক

49
49

JWT (JSON Web Token) এবং JSON (JavaScript Object Notation) দুটি আলাদা প্রযুক্তি, তবে তাদের মধ্যে একটি গভীর সম্পর্ক রয়েছে। JSON হল একটি ডেটা ফরম্যাট যা ডেটা স্টোর বা এক্সচেঞ্জ করতে ব্যবহৃত হয়, যেখানে JWT হল একটি স্ট্যান্ডার্ড যা নিরাপদভাবে JSON অবজেক্ট পাঠানোর জন্য ডিজাইন করা হয়েছে। JWT মূলত একটি ক্রিপ্টোগ্রাফিক সিগনেচার দ্বারা সুরক্ষিত JSON ডেটা, যা সাধারণত অথেনটিকেশন এবং অথোরাইজেশনের ক্ষেত্রে ব্যবহৃত হয়।

JSON (JavaScript Object Notation)


JSON একটি লাইটওয়েট, মানব-পাঠযোগ্য এবং মেশিন-পার্সযোগ্য ডেটা ফরম্যাট। এটি ওয়েব সার্ভিস এবং অ্যাপ্লিকেশনগুলির মধ্যে ডেটা এক্সচেঞ্জ করার জন্য ব্যাপকভাবে ব্যবহৃত হয়। JSON সাধারণত কীগুলি এবং মানের (key-value pairs) মাধ্যমে ডেটা ধারণ করে, যেমন:

{
    "name": "John Doe",
    "age": 30,
    "email": "john.doe@example.com"
}

এখানে name, age, এবং email কীগুলি এবং তাদের মানগুলো JSON ডেটার অংশ।

JWT (JSON Web Token)


JWT (JSON Web Token) একটি স্ট্যান্ডার্ড যা সুরক্ষিতভাবে JSON অবজেক্ট ধারণ করে এবং এটি মূলত Authentication (অথেনটিকেশন) এবং Authorization (অথোরাইজেশন) এর জন্য ব্যবহৃত হয়। JWT একটি Token যা ৩টি অংশে বিভক্ত:

  1. Header: এটি JSON অবজেক্ট, যা টোকেনের টাইপ (যেমন JWT) এবং সিগনেচার এলগোরিদম (যেমন HMAC SHA256) নির্দেশ করে।
  2. Payload: এটি মূলত "claims" ধারণ করে। Claims হলো তথ্য যা একটি টোকেনের মধ্যে স্টোর করা থাকে, যেমন ব্যবহারকারীর পরিচয়, অনুমতি (permissions), বা অভ্যন্তরীণ ডেটা।
  3. Signature: এটি একটি নিরাপত্তা অংশ যা টোকেনের সত্যতা নিশ্চিত করতে ব্যবহৃত হয়। এটি Header এবং Payload এর উপর ভিত্তি করে তৈরি হয় এবং একটি সিক্রেট কি দিয়ে সাইন করা হয়।

JWT Structure:

header.payload.signature

Example of a JWT:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

এখানে:

  • Header: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 (Base64-encoded)
  • Payload: eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ (Base64-encoded)
  • Signature: SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT এবং JSON এর মধ্যে সম্পর্ক


  1. JSON ফরম্যাটে তথ্য ধারণ: JWT একটি JSON অবজেক্ট যা সুরক্ষিত তথ্য ধারণ করে। JWT এর Payload অংশে JSON ফরম্যাটে বিভিন্ন ক্লেইমস (claims) রাখা হয়, যেমন ব্যবহারকারীর নাম, ইমেইল, ভূমিকা (role), অথবা অন্য কোনো ডেটা।
  2. JWT Header JSON: JWT এর Header অংশটি একটি JSON অবজেক্ট থাকে, যেখানে টোকেনের প্রকার (JWT) এবং সিগনেচার এলগোরিদমের তথ্য থাকে। যেমন:

    {
        "alg": "HS256",
        "typ": "JWT"
    }
    

    এখানে alg হলো সিগনেচার এলগোরিদম এবং typ হলো টোকেনের টাইপ।

  3. JWT Payload JSON: JWT এর Payload অংশে JSON অবজেক্ট থাকে, যা বিভিন্ন "claims" ধারণ করে। Payload এর মধ্যে সাধারণত তথ্য বা ডেটা থাকে যেগুলো প্রয়োজন অনুযায়ী শেয়ার করা হয়। উদাহরণস্বরূপ:

    {
        "sub": "1234567890",
        "name": "John Doe",
        "iat": 1516239022
    }
    

    এখানে, sub হল সাবজেক্ট (বিশেষত ব্যবহারকারী বা ইস্যুকৃত), name ব্যবহারকারীর নাম, এবং iat হলো টোকেনের ইস্যু সময়।

  4. JSON ব্যবহার করা সহজ: JSON ফরম্যাটের স্ট্রাকচার সহজ এবং পাঠযোগ্য, যার ফলে JWT-এর ডেটা খুব সহজেই অ্যাক্সেস এবং ব্যবহার করা সম্ভব। বিশেষত ওয়েব অ্যাপ্লিকেশন বা API গুলিতে JSON এবং JWT এর মধ্যে সম্পর্ক খুবই গুরুত্বপূর্ণ, কারণ JSON ডেটা ট্রান্সফার ফরম্যাট হিসাবে ব্যবহার করা হয় এবং JWT ব্যবহারকারীর অথেনটিকেশন ও অথোরাইজেশন নিশ্চিত করতে ব্যবহৃত হয়।
  5. JWT-র নিরাপত্তা JSON এর মধ্যে থাকে: JSON ডেটা সাধারণত পাঠযোগ্য ও মেশিন-পার্সযোগ্য হয়, তবে JWT সিগনেচারের মাধ্যমে JSON ডেটাকে নিরাপদ ও সুরক্ষিত করা হয়, যাতে কোনো ম্যালিশিয়াস ইউজার এই ডেটাকে পরিবর্তন না করতে পারে।

সারাংশ


JSON (JavaScript Object Notation) এবং JWT (JSON Web Token) উভয়ই JSON ফরম্যাটে তথ্য সংরক্ষণ এবং শেয়ার করার জন্য ব্যবহৃত হয়। JSON একটি সাধারণ ডেটা ফরম্যাট, যা ডেটা এক্সচেঞ্জের জন্য ব্যবহৃত হয়, যখন JWT একটি সুরক্ষিত JSON অবজেক্ট যা Authentication এবং Authorization নিশ্চিত করতে ব্যবহৃত হয়। JSONP এর মাধ্যমে JSON ফরম্যাটে তথ্য ধারণ করা হয়, আর JWT একই JSON ডেটা সিগনেচারের মাধ্যমে সুরক্ষিত এবং বৈধ করে।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion