JSON Web Tokens (JWT) একটি স্ট্যান্ডার্ড (RFC 7519) যা JSON অবজেক্ট ব্যবহার করে নিরাপদভাবে তথ্য আদান-প্রদান করার জন্য ডিজাইন করা হয়েছে। JWT সাধারণত ব্যবহারকারী প্রমাণীকরণ (authentication) এবং অথরাইজেশন (authorization) এর জন্য ব্যবহৃত হয়, বিশেষত ওয়েব অ্যাপ্লিকেশন এবং API সিস্টেমে। এটি একটি কমপ্যাক্ট, স্বাধীন এবং নিরাপদ উপায়ে ডেটা সংরক্ষণ এবং প্রেরণ করতে সহায়তা করে।
JWT সাধারণত ৩টি অংশ দিয়ে গঠিত:
HS256
বা RS256
অ্যালগরিদমের মাধ্যমে সাইন করা হয়।<Header>.<Payload>.<Signature>
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>
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);
}
}
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");
}
}
}
sub
(Subject): সাধারণত JWT এর মালিক (ব্যবহারকারী) এর আইডি ধারণ করে।iat
(Issued At): যখন টোকেন তৈরি হয়েছে তা ধারণ করে।exp
(Expiration Time): টোকেনের মেয়াদ শেষ হওয়ার সময় নির্দেশ করে।aud
(Audience): টোকেনটি কাদের জন্য তৈরি, তার একটি নির্দেশিকা।JSON Web Token (JWT) একটি শক্তিশালী টুল যা নিরাপদ তথ্য আদান-প্রদান এবং অথরাইজেশন ব্যবস্থাপনায় অত্যন্ত কার্যকর। Java তে JWT তৈরি এবং যাচাই করার জন্য jjwt
এবং Java JWT
লাইব্রেরি অত্যন্ত জনপ্রিয়। JWT ব্যবহার করে আপনি ওয়েব অ্যাপ্লিকেশন এবং API গুলির মধ্যে নিরাপদ ডেটা আদান-প্রদান সহজে করতে পারেন।
JWT (JSON Web Token) হল একটি ওপেন স্ট্যান্ডার্ড (RFC 7519) যা ক্লায়েন্ট এবং সার্ভারের মধ্যে নিরাপদভাবে তথ্য আদান-প্রদান করতে ব্যবহৃত হয়। এটি একটি টোকেন ভিত্তিক অথেন্টিকেশন প্রযুক্তি, যা মূলত RESTful API এবং Single Page Applications (SPA) এর ক্ষেত্রে ব্যবহৃত হয়। JWT একটি সাইন করা এবং এনকোড করা স্ট্রিং যা বিভিন্ন অংশের মাধ্যমে তথ্য ধারণ করে, এবং এটি সার্ভার এবং ক্লায়েন্টের মধ্যে নিরাপদভাবে তথ্য ট্রান্সফার করতে ব্যবহৃত হয়।
JWT তিনটি অংশে বিভক্ত:
JWT সাধারণত তিনটি অংশে বিভক্ত থাকে, এবং প্রতিটি অংশ একটি ডেলিমিটার দ্বারা আলাদা করা হয়। এটি এমন একটি স্ট্রিং যা header.payload.signature
ফরম্যাটে থাকে।
<Header>.<Payload>.<Signature>
typ
): সাধারণত JWT
থাকে।alg
): সাধারণত HS256
বা RS256
থাকে।উদাহরণ:
{
"alg": "HS256",
"typ": "JWT"
}
iss
(issuer), exp
(expiration time), sub
(subject) ইত্যাদি।উদাহরণ:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
Header
এবং Payload
কে সিক্রেট কী বা পাবলিক কী দিয়ে সাইন করে তৈরি করা হয়।HS256
) ব্যবহার করে সিগনেচার তৈরি করা হয়:HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
এই সিগনেচারটি পরে টোকেনের খ্যাতি এবং সততা নিশ্চিত করার জন্য ব্যবহৃত হয়।
JWT ব্যবহার করা হয় ব্যবহারকারীর অথেন্টিকেশন এবং অথরাইজেশনের জন্য। এটি বিশেষত Stateless Authentication-এর জন্য উপকারী, যেখানে সার্ভার কোন সেশন বা ইউজার স্টেট ট্র্যাক করে না। নিম্নলিখিত পদক্ষেপগুলো দিয়ে JWT সাধারণত কাজ করে:
Authorization: Bearer <JWT>
আকারে পাঠায়।exp
claim চেক করে নিশ্চিত করা হয় যে টোকেনটি মেয়াদ উত্তীর্ণ হয়নি।exp
(expiration) claim রাখে, যা টোকেনের মেয়াদ নির্ধারণ করে।JWT (JSON Web Token) একটি নিরাপদ টোকেন ভিত্তিক অথেন্টিকেশন পদ্ধতি, যা stateless authentication সমর্থন করে। এটি header, payload, এবং signature নিয়ে তৈরি হয় এবং ক্লায়েন্ট এবং সার্ভারের মধ্যে নিরাপদভাবে তথ্য আদান-প্রদান করতে ব্যবহৃত হয়। JWT ব্যবহার করে Cross-Domain অথরাইজেশন, API অথেন্টিকেশন, এবং Single Sign-On (SSO) সহজ হয়। এটি নিরাপত্তা নিশ্চিত করার জন্য সিগনেচার ব্যবহার করে এবং সার্ভার সেশন ট্র্যাক করার প্রয়োজন ছাড়াই কাজ করতে পারে।
JWT (JSON Web Token) হল একটি স্ট্যান্ডার্ড যা নিরাপদ ডেটা এক্সচেঞ্জ করার জন্য ব্যবহৃত হয়। এটি সাধারণত ব্যবহারকারীর সনাক্তকরণ (authentication) এবং অনুমোদন (authorization) এর জন্য ওয়েব অ্যাপ্লিকেশন বা সার্ভিসেসে ব্যবহৃত হয়। JWT একটি স্ট্রিং হিসেবে থাকে যা তিনটি অংশে বিভক্ত:
এগুলির মধ্যে প্রতিটি অংশের একটি নির্দিষ্ট কাজ থাকে এবং JWT এর গঠন ও নিরাপত্তা নিশ্চিত করতে সাহায্য করে।
Header অংশটি JWT-এর প্রথম অংশ, যা সাধারণত দুটি উপাদান ধারণ করে:
HS256
, RS256
ইত্যাদি।"JWT"
থাকে।Header সাধারণত Base64Url এ এনকোড করা হয়, যা একটি সংক্ষিপ্ত স্ট্রিং রূপে পরিবর্তিত হয়।
{
"alg": "HS256",
"typ": "JWT"
}
এখানে:
alg
নির্দেশ করছে যে এই JWT কে HMAC SHA-256 অ্যালগরিদম দিয়ে সাইন করা হবে।typ
নির্দেশ করছে যে এটি একটি JWT টোকেন।Payload অংশটি JWT এর দ্বিতীয় অংশ, যা মূল ডেটা ধারণ করে। এটি এমন তথ্য বা ক্লেইম (claims) ধারণ করে যা JWT এর ব্যবহারকারী বা অ্যাপ্লিকেশন পেতে চায়।
Payload বিভিন্ন ধরনের claims ধারণ করে:
iss
(issuer), exp
(expiration), sub
(subject), aud
(audience) ইত্যাদি।Payload অংশটি Base64Url এ এনকোড করা হয় এবং এটি সাইন করার জন্য ব্যবহার করা হয় না, তবে এটি সর্বসাধারণের জন্য সহজেই ডিকোড করা যেতে পারে।
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
এখানে:
sub
হল টোকেনের সত্ত্বাধিকারীর আইডি।name
হল সত্ত্বাধিকারীর নাম।iat
হল "issued at" টাইমস্ট্যাম্প, যা নির্দেশ করে কখন টোকেনটি জেনারেট করা হয়েছে।Signature হল JWT এর তৃতীয় এবং শেষ অংশ। এটি টোকেনের নিরাপত্তা নিশ্চিত করে এবং যাচাইয়ের জন্য ব্যবহৃত হয়। Signature তৈরি করতে, প্রথমে Header এবং Payload অংশ দুটি এনকোড করা হয় এবং তারপর একটি secret key (যা জানেন শুধু সার্ভার) ব্যবহার করে সাইনিং অ্যালগরিদমের মাধ্যমে সাইন করা হয়। সাধারণত HMAC SHA-256 অ্যালগরিদম ব্যবহার করা হয়।
সিগনেচার তৈরি করার জন্য নিম্নলিখিত ধাপগুলি অনুসরণ করা হয়:
.
(ডট) দিয়ে তাদের মধ্যে যোগ করুন।HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
এখানে:
base64UrlEncode
Header এবং Payload অংশকে Base64Url এনকোড করে।HMACSHA256
হল সাইনিং অ্যালগরিদম, যা Header, Payload এবং Secret key ব্যবহার করে Signature তৈরি করে।JWT এর গঠন সাধারণত তিনটি অংশে বিভক্ত থাকে:
এই তিনটি অংশ একত্রিত হয়ে একটি স্ট্রিং তৈরি করে, যা JWT হিসেবে পরিচিত।
eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJzdWIiOiAiMTIzNDU2Nzg5MCIsICJuYW1lIjogIkpvaG4gRG9lIiwgImlhdCI6IDE1MTYyMzkwMjJ9.YXpEZHBqQl88FL0OktqlniG93k7fjxnm0v65wyhn_cY
এখানে:
JWT (JSON Web Token) হল একটি নিরাপদ এবং কার্যকরী পদ্ধতি ডেটা এক্সচেঞ্জ করার জন্য, যা মূলত তিনটি অংশে বিভক্ত:
JWT এর গঠন এবং নিরাপত্তা বৈশিষ্ট্যগুলি এটিকে আধুনিক ওয়েব অ্যাপ্লিকেশনগুলিতে সেশন ম্যানেজমেন্ট, অথেন্টিকেশন এবং অথোরাইজেশন জন্য অত্যন্ত জনপ্রিয় করে তুলেছে।
JWT (JSON Web Token) একটি ওপেন স্ট্যান্ডার্ড (RFC 7519) যা নিরাপদভাবে তথ্য বিনিময়ের জন্য ব্যবহৃত হয়। এটি একটি কমপ্যাক্ট এবং স্বাধীন তথ্য কাঠামো যা URL, HTTP হেডার বা কুকি সহ বিভিন্ন মাধ্যমে পাঠানো যেতে পারে। JWT ব্যবহার করে Authentication (প্রমাণীকরণ) এবং Authorization (অনুমোদন) কার্যক্রম নিরাপদে সম্পাদন করা যায়।
JWT তিনটি অংশে বিভক্ত:
JWT এর স্ট্রাকচার সাধারণত তিনটি অংশে বিভক্ত থাকে:
header.payload.signature
এটি JSON ফরম্যাটে থাকে এবং সাধারণত দুটি ক্ষেত্র থাকে:
{
"alg": "HS256",
"typ": "JWT"
}
পেইলোডে তথ্য থাকে যা claims নামে পরিচিত। claims মূলত ব্যবহারকারীর তথ্য যেমন, নাম, ইমেইল, রোল ইত্যাদি ধারণ করে। এই অংশে তিনটি ধরণের claims থাকে:
sub
(subject), iat
(issued at), exp
(expiration time)।{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
স্বাক্ষরটি তৈরি করার জন্য সার্ভার একটি গোপন কী ব্যবহার করে। এটি header এবং payload এর ভিত্তিতে তৈরি হয়, এবং secret key (যদি HMAC ব্যবহার করা হয়) অথবা private key (যদি RSA ব্যবহার করা হয়) দ্বারা সুরক্ষিত থাকে।
Authentication এর মাধ্যমে ব্যবহারকারী বা ক্লায়েন্টের পরিচয় যাচাই করা হয়। JWT ব্যবহার করে Authentication প্রক্রিয়া নিম্নরূপ:
Login Request:
POST /login
{
"username": "john_doe",
"password": "password123"
}
JWT Token Generation: সার্ভার ব্যবহারকারীর পাসওয়ার্ড যাচাই করে এবং একটি JWT টোকেন রিটার্ন করে:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}
Authenticated Request: পরবর্তী রিকোয়েস্টে, ব্যবহারকারী তাদের JWT টোকেন সহ Authorization হেডারে পাঠায়:
GET /user/profile
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Authorization এর মাধ্যমে ব্যবহারকারীর কাছে নির্দিষ্ট রিসোর্সের অ্যাক্সেস কন্ট্রোল করা হয়। JWT টোকেনের মধ্যে অন্তর্ভুক্ত claims এর ভিত্তিতে অ্যাপ্লিকেশন বিভিন্ন অনুমতি নিয়ন্ত্রণ করতে পারে।
একটি সার্ভার ব্যবহৃত JWT-তে role নামক একটি claim থাকতে পারে যা ব্যবহারকারীর রোল সংরক্ষণ করে। সার্ভার এই claim-এর উপর ভিত্তি করে অনুমতি প্রদান করতে পারে।
Payload Example:
{
"sub": "1234567890",
"name": "John Doe",
"role": "admin",
"iat": 1516239022
}
এখানে, role: "admin"
দেখে সার্ভার বুঝতে পারে যে ব্যবহারকারী প্রশাসনিক অ্যাক্সেস রাখে এবং তাকে অতিরিক্ত অনুমতি দেওয়া যেতে পারে।
JWT (JSON Web Token) হলো একটি নিরাপদ, কমপ্যাক্ট এবং কার্যকর পদ্ধতি যা authentication এবং authorization সম্পাদন করতে ব্যবহৃত হয়। এটি একটি header, payload, এবং signature নিয়ে গঠিত। JWT ক্লায়েন্ট-সার্ভার আর্কিটেকচারে বিশেষভাবে ব্যবহৃত হয় যেখানে সার্ভারকে সেশন ডেটা সংরক্ষণ না করে ব্যবহারকারী প্রমাণীকরণ এবং অনুমোদন নিশ্চিত করতে হয়। JWT টোকেনগুলো সহজভাবে HTTP হেডারের মাধ্যমে পাঠানো যায় এবং এটি CORS সমস্যা ছাড়াই কাজ করতে সক্ষম।
JWT (JSON Web Token) এবং JSON (JavaScript Object Notation) দুটি আলাদা প্রযুক্তি, তবে তাদের মধ্যে একটি গভীর সম্পর্ক রয়েছে। JSON হল একটি ডেটা ফরম্যাট যা ডেটা স্টোর বা এক্সচেঞ্জ করতে ব্যবহৃত হয়, যেখানে JWT হল একটি স্ট্যান্ডার্ড যা নিরাপদভাবে JSON অবজেক্ট পাঠানোর জন্য ডিজাইন করা হয়েছে। JWT মূলত একটি ক্রিপ্টোগ্রাফিক সিগনেচার দ্বারা সুরক্ষিত JSON ডেটা, যা সাধারণত অথেনটিকেশন এবং অথোরাইজেশনের ক্ষেত্রে ব্যবহৃত হয়।
JSON একটি লাইটওয়েট, মানব-পাঠযোগ্য এবং মেশিন-পার্সযোগ্য ডেটা ফরম্যাট। এটি ওয়েব সার্ভিস এবং অ্যাপ্লিকেশনগুলির মধ্যে ডেটা এক্সচেঞ্জ করার জন্য ব্যাপকভাবে ব্যবহৃত হয়। JSON সাধারণত কীগুলি এবং মানের (key-value pairs) মাধ্যমে ডেটা ধারণ করে, যেমন:
{
"name": "John Doe",
"age": 30,
"email": "john.doe@example.com"
}
এখানে name
, age
, এবং email
কীগুলি এবং তাদের মানগুলো JSON ডেটার অংশ।
JWT (JSON Web Token) একটি স্ট্যান্ডার্ড যা সুরক্ষিতভাবে JSON অবজেক্ট ধারণ করে এবং এটি মূলত Authentication (অথেনটিকেশন) এবং Authorization (অথোরাইজেশন) এর জন্য ব্যবহৃত হয়। JWT একটি Token যা ৩টি অংশে বিভক্ত:
header.payload.signature
Example of a JWT:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
এখানে:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
(Base64-encoded)eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
(Base64-encoded)SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
JWT Header JSON: JWT এর Header অংশটি একটি JSON অবজেক্ট থাকে, যেখানে টোকেনের প্রকার (JWT) এবং সিগনেচার এলগোরিদমের তথ্য থাকে। যেমন:
{
"alg": "HS256",
"typ": "JWT"
}
এখানে alg
হলো সিগনেচার এলগোরিদম এবং typ
হলো টোকেনের টাইপ।
JWT Payload JSON: JWT এর Payload অংশে JSON অবজেক্ট থাকে, যা বিভিন্ন "claims" ধারণ করে। Payload এর মধ্যে সাধারণত তথ্য বা ডেটা থাকে যেগুলো প্রয়োজন অনুযায়ী শেয়ার করা হয়। উদাহরণস্বরূপ:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
এখানে, sub
হল সাবজেক্ট (বিশেষত ব্যবহারকারী বা ইস্যুকৃত), name
ব্যবহারকারীর নাম, এবং iat
হলো টোকেনের ইস্যু সময়।
JSON (JavaScript Object Notation) এবং JWT (JSON Web Token) উভয়ই JSON ফরম্যাটে তথ্য সংরক্ষণ এবং শেয়ার করার জন্য ব্যবহৃত হয়। JSON একটি সাধারণ ডেটা ফরম্যাট, যা ডেটা এক্সচেঞ্জের জন্য ব্যবহৃত হয়, যখন JWT একটি সুরক্ষিত JSON অবজেক্ট যা Authentication এবং Authorization নিশ্চিত করতে ব্যবহৃত হয়। JSONP এর মাধ্যমে JSON ফরম্যাটে তথ্য ধারণ করা হয়, আর JWT একই JSON ডেটা সিগনেচারের মাধ্যমে সুরক্ষিত এবং বৈধ করে।
Read more