‹ முகப்புக்கு திரும்ப

Session-ஆ JWT-ஆ OAuth-ஆ உங்க App-க்கு எது?

College project Login page-ல தான் பெருசா Hack ஆகும். Session, JWT, Google OAuth, Password Hash — Chennai desk-ல ஒரு senior சொல்ற மாதிரி சுருக்கமா.

Keerthika 7 min read
Google-ல் Follow
Web Dev Session-ஆ JWT-ஆ OAuth-ஆ உங்க App-க்கு எது? 7 நிமிடம் மீதம் Google-ல் Follow

தமிழ்டெக் AI சுருக்கம்

  • Website-க்கு HttpOnly session cookie போதும்
  • JWT payload யாரும் படிக்கலாம், secret இல்ல
  • Password-க்கு Argon2id; MD5 வேண்டாம்

AI உதவியுடன் தயாரான சுருக்கம் — தமிழ்டெக் எடிட்டர்ஸ் சரிபார்த்தது.

0:00
0:00
🔒 Listen வசதி subscribers-க்கு மட்டும். Subscribe செய்யுங்கள்

முக்கிய விஷயங்கள்

  • Website, admin panel, college ERP மாதிரி App-க்கு Server Session + HttpOnly cookie தான் பெருசா சரி.
  • Public API, Android, React Native-க்கு short Access Token. JWT-ஐ localStorage-ல போடாதீங்க.
  • JWT signed தான், secret இல்ல. Payload-ஐ யார் வேணாலும் படிக்கலாம்.
  • Google OAuth identity prove பண்ணும். அப்புறமும் உங்க Session நீங்களே start பண்ணணும்.
  • Password-க்கு Argon2id. MD5 வேண்டாம். Plain SHA-256-ம் வேண்டாம்.
  • Access Token சில நிமிஷம். Refresh Token rotate பண்ணுங்க. இல்லனா Session-யே போதும்.

Authentication அப்படின்னா என்ன?

Website, admin panel, college ERP மாதிரி App-க்கு Server Session + HttpOnly cookie தான் பெருசா சரி; public API, Android, React Native-க்கு short Access Token தான். இந்த article-ல Session, JWT, Google OAuth மூணையும் எப்போ எது போடணும், JWT-ஐ localStorage-ல வைக்கக் கூடாத காரணம், OAuth identity prove பண்ணிட்டாலும் session நீங்களே start பண்ணணும், password-க்கு Argon2id, Access Token சில நிமிஷம் — hostel project-ல token copy பண்ணி admin ஆன பாடத்தோட சொல்றோம்.

Session, JWT, Google button — இதெல்லாம் identity-க்கு proof தான். அடுத்த கதவு Authorization. அதாவது இந்த User /admin திறக்கலாமா, இல்ல /orders மட்டும்தானா. Panel-ல இந்த ரெண்டு word-ஐயும் கலந்து சொன்னா interviewer note எடுக்குறத நிறுத்திடுவார்.

Campus interview-ல இத முதல்ல கேப்பாங்க. காரணம் எளிசு. YouTube video follow பண்ணினீங்களா, இல்ல ஒரு உண்மையான App ship பண்ணினீங்களான்னு இங்கே தெரியும்.

Session-ஆ Token-ஆ உங்க App-க்கு எது?

T. Nagar பக்கத்துல ஒரு சின்ன hotel நினைச்சு பாருங்க. Session Login அதாவது front desk diary. Password சரின்னா Server "user 42 உள்ள வந்துட்டாரு"னு எழுதி வைக்கும். Browser-க்கு ஒரு random Session id Cookie-ல போகும். ஒவ்வொரு Request-லும் Browser அந்த Cookie-ஐ அனுப்பும். Server diary திறந்து பார்க்கும். வெளியே தள்ளணுமா? அந்த row-ஐ delete பண்ணுங்க. முடிஞ்சது.

Token வேற மாதிரி. Guest pocket-ல ஒரு laminated pass. Kitchen desk-ஐ call பண்ணாது. Pass-ஐ படிச்சுட்டு வேலை நடக்கும். Android, Web, partner API எல்லாம் ஒரே Server-ஐ அடிக்கும்போது இது handy. Stolen pass-ஐ இப்போவே கொல்லணும்னா தான் கஷ்டம்.

College ERP, Flipkart மாதிரி catalogue, internal dashboard — இதெல்லாத்துக்கும் Server Session போதும். Cookie HttpOnly, Secure, SameSite ஆ இருக்கணும். Public API அல்லது React Native-ன்னா short Token கொடுங்க.

JWT-ஐ localStorage-ல போடுறது modern இல்ல. XSS வந்தா room key-யே எடுத்துட்டு போயிடும். HttpOnly இருக்கிறது JavaScript-ஆல Cookie-ஐ தூக்க முடியாதுனு.

import express from "express";
import session from "express-session";

const app = express();
app.use(session({
  secret: process.env.SESSION_SECRET,
  resave: false,
  saveUninitialized: false,
  cookie: {
    httpOnly: true,
    secure: process.env.NODE_ENV === "production",
    sameSite: "lax",
    maxAge: 1000 * 60 * 60 * 8
  }
}));

app.post("/login", async function (req, res) {
  req.session.userId = 42;
  res.json({ ok: true });
});

Essay படிக்க பிடிக்கலன்னா இந்த மூணு வரி போதும். Website, admin panel-க்கு Session + Cookie. User-ஐ வெளியே தள்ளணும்னா session row delete. API, mobile-க்கு JWT Access Token — revoke கஷ்டம், blocklist வைக்காட்டி முடியாது. Google OAuth social button மட்டும். அப்புறமும் Session உங்க கையில தான்.

JWT உள்ளே என்ன இருக்கு?

மூணு Base64 துண்டு. நடுவுல dot. Header, payload, signature. ஒன்னு jwt.io-ல paste பண்ணுங்க. Payload தெரியும். அதாவது JWT lock பண்ணி வைக்கல. Sign பண்ணி வைச்சிருக்கோம். யாரும் படிக்கலாம். மாத்தி அனுப்பினா signature உடையும் — அந்த check தான் காப்பாற்றும்.

உதாரணமாக, payload-ல role: admin போட்டு edit பண்ணி அனுப்பினா, signature verify பண்ணாத Server அதை நம்பிடும். Password, Aadhaar, card number JWT-ல போடாதீங்க. படிக்கறது யாருக்கு வேணும்னாலும் சுலபம்.

இன்னொரு பயம். Token already வெளியே போனா, expiry வரைக்கும் நம்புற மாதிரி இருக்கும். Server-ல diary இல்ல. அதனால Access Token-ஐ 15 நிமிஷம் மாதிரி குறைவா வைங்க. Secret-ஐ Git-ல போடாதீங்க. Verify-ஐ உங்களே decode பண்ணி skip பண்ணாதீங்க. Library கொடுக்குற jwtVerify வழியே போங்க.

import { SignJWT, jwtVerify } from "jose";

const secret = new TextEncoder().encode(process.env.JWT_SECRET);

const token = await new SignJWT({ sub: "42", role: "user" })
  .setProtectedHeader({ alg: "HS256" })
  .setIssuedAt()
  .setExpirationTime("15m")
  .sign(secret);

const { payload } = await jwtVerify(token, secret);
console.log(payload.sub);

jose மாதிரி maintained library use பண்ணுங்க. Unsigned Token-ஐ ஏற்காதீங்க. Algorithm-ஐ Client சொன்னத நம்பாதீங்க. Server-ல நீங்க fix பண்ணின algorithm மட்டும்.

Google-ல Login எப்படி பண்ணலாம்?

OAuth அப்படின்னா, Password உங்ககிட்ட கேட்காம Google-கிட்டே கேட்டு identity confirm பண்றது. User Google-ல already Login ஆயிருப்பார். உங்க App-க்கு ஒரு permission screen. Approve பண்ணினா Google ஒரு code தரும். அதை Server-லயே Token-ஆ மாத்தி, email / sub வாங்குங்க.

இங்கே பலர் செய்யற தப்பு: Google சொன்னா போதும்னு நினைச்சு, உங்க App-ல Session வைக்காம Browser-லயே Google Token-ஐ வைச்சுக்கிறது. Google Token உங்க Authorization இல்ல. அது Google-க்கு proof. உங்க /orders, உங்க /admin — அதெல்லாம் உங்க Server தான் முடிவு பண்ணணும்.

Flow எளிசு. Button அழுத்தினா Google-க்கு அனுப்புங்க. Callback-ல code வாங்குங்க. Google user id-ஐ உங்க users table-ல கண்டறிஞ்சு, இல்லனா create பண்ணுங்க. அப்புறம் உங்க Session start பண்ணுங்க. GPay-ல UPI pin வேற, Phone lock வேற இல்லையா. அதே மாதிரி Google identity வேற, உங்க App session வேற.

app.get("/auth/google/callback", async function (req, res) {
  const code = String(req.query.code || "");
  const googleUser = await exchangeCodeForGoogleUser(code);
  const userId = await findOrCreateUser(googleUser.sub, googleUser.email);
  req.session.userId = userId;
  res.redirect("/dashboard");
});

exchangeCodeForGoogleUser-ஐ Client-ல போடாதீங்க. Client secret browser-ல போகக் கூடாது. Redirect URI-ஐ Google Cloud Console-ல exact-ஆ match ஆகணும். Localhost-க்கு ஒரு URI, production domain-க்கு வேற URI.

Password-ஐ எப்படி Hash பண்ணணும்?

User Password-ஐ Database-ல plain text-ல வைக்கிற App இன்னும் campus-ல சுத்துது. அது Login இல்ல, waiting room. Hash அப்படின்னா, Password-ஐ ஒரு one-way மாற்று. திருப்பி அதே Password கிடைக்காது. Login-ல User கொடுத்த Password-ஐ மறுபடி Hash பண்ணி, வைச்சிருக்கிற Hash-ோட compare பண்ணுவோம்.

MD5 வேண்டாம். Plain SHA-256-ம் வேண்டாம். அவை fast. Fast hash என்றாலே guess பண்றதுக்கும் fast. இப்போ Node-ல Argon2id தான் முதல் choice. bcrypt இன்னும் நிறைய production-ல இருக்கு, பழைய project-ல சரி. புது App எழுதுறீங்கன்னா Argon2id.

Salt library போட்டுடும். நீங்க manual-ஆ "1234" salt போடாதீங்க. Pepper வேணும்னா Server env-ல ஒரு secret வைங்க. Hash parameters-ஐ random-ஆ குறைக்காதீங்க. Default memory-cost-ஐ ஏற்கனவே நல்லா இருக்கு.

import argon2 from "argon2";

const hash = await argon2.hash(password, { type: argon2.argon2id });
const ok = await argon2.verify(hash, password);

if (!ok) {
  throw new Error("invalid credentials");
}

Error message-ல "இந்த email இல்ல"னு தனியே சொல்லாதீங்க. "invalid credentials" போதும். Timing-லயே email இருக்கா இல்லையான்னு கசிக்கக் கூடாது. Reset link-ஐயும் same response தான் காட்டுங்க.

Refresh Token வேணுமா?

Access Token-ஐ 15 நிமிஷம் வைச்சா, ஒவ்வொரு காபி break-க்கும் Login கேக்கும். அதனாலதான் Refresh Token பேசுறாங்க. அதாவது சின்ன pass முடிஞ்சா, பெரிய pass காட்டி புது சின்ன pass வாங்குறது.

இங்கேயும் hotel தான். Refresh Token-ஐ Browser JavaScript-க்கு காட்டாதீங்க. HttpOnly Cookie-லயோ, mobile-ல secure storage-லயோ. ஒவ்வொரு முறை use ஆகும்போதும் பழைய Refresh-ஐ invalid பண்ணி, புது Refresh கொடுங்க. இத தான் rotation. Steal ஆன Token மறுபடி வந்தா, family முழுக்க revoke பண்ணுங்க.

Website மட்டும்தானா? Refresh வேணாம். Server Session-யே போதும். 8 மணி நேரம் Cookie, Logout-ல destroy. Microservice, mobile, partner API இதெல்லாம் இருந்தா மட்டும் Access + rotating Refresh யோசிங்க. Refresh-ஐ database-ல hash பண்ணி வைங்க. Plain Token row-ல இருக்கக் கூடாது.

யார் எந்த mistake பண்ணி trouble-ல மாட்டுறாங்க?

முதல் தப்பு: JWT-ஐ localStorage-ல போட்டு, tutorial comment-ல "production ready"னு எழுதுறது. XSS ஒண்ணு போதும்.

ரெண்டாவது: Session id-ஐ URL-ல போடுறது. Referrer header-லயே id வெளியே போகும்.

மூணாவது: CORS-ல Access-Control-Allow-Origin: * போட்டு, credentials true. Cookie எல்லாருக்குமா?

நாலாவது: Logout UI மட்டும். Server-ல session destroy இல்ல, refresh list-லயும் இல்ல. Button அழகா இருக்கும். User இன்னும் உள்ள தான்.

ஐந்தாவது: Password Hash-ஐ SHA-256(password)னு எழுதி, "encrypt பண்ணிட்டோம்"னு viva-ல சொல்றது. Encrypt வேற, Hash வேற. Interviewer அங்கேயே நிறுத்துவார்.

ஆறாவது: JWT payload-ல permission 15 field. Token பெருசாகும். Revoke முடியாது. Role மாறினா பழைய Token-ல பழைய role.

நீங்க இப்போ என்ன பண்ணணும்?

Chennai, Bengaluru, Hyderabad-ல Web interview-ல முதல் சுத்து இது தான். Zoho, Freshworks, Flipkart, Swiggy மாதிரி product team-ல Session cookie, CSRF, SameSite, Token theft கேப்பாங்க. Service company-ல கூட "JWT vs Session" whiteboard வரும். IRCTC, GPay மாதிரி Login flow பார்த்து, எங்க Session, எங்க OAuthனு பிரிச்சு சொன்னா நீங்க tutorial-ஐ தாண்டினீங்கனு தெரியும்.

Practice task சின்னது. Express-ல ஒரு /login, ஒரு /me, ஒரு /logout எழுதுங்க. Login-ல Session Cookie. /me-ல userId இல்லன்னா 401. Logout-ல session destroy. அப்புறம் ஒரு JWT-ஐ jose-ல 15m expiry-ல போட்டு, jwt.io-ல payload படிங்க. Password field இல்லையான்னு பாருங்க. கடைசியா argon2id-ல ஒரு Password Hash பண்ணி, தப்பு Password கொடுத்து verify fail ஆகறத பாருங்க.

Website கட்டுறீங்கன்னா இன்றே Session + HttpOnly-ல நிறுத்துங்க. Mobile API வேணும்னா மட்டும் short Access Token. Google button வேணும்னா identity வாங்கி, உங்க Session-யே start பண்ணுங்க. இந்த மூணு வரி நினைவு இருந்தா, hostel demo-ல அந்த silence உங்க பக்கம் வராது.

அடிக்கடி கேட்கப்படும் கேள்விகள்

5

JWT-ஐ localStorage-ல வைக்கலாமா?

வேண்டாம். XSS வந்தா Token எடுத்துட்டு போயிடும். Website-க்கு HttpOnly Cookie. Mobile-ல platform secure storage.

என் college project-க்கு Session போதுமா, JWT வேணுமா?

ERP, dashboard, catalogue மாதிரி Browser App-ன்னா Session + HttpOnly cookie போதும். தனியே Android/API இருந்தா மட்டும் short JWT யோசிங்க.

Google Login போட்டோம்னா Password Hash வேணாமா?

Google மட்டும் வச்சா, அந்த User-க்கு Password இல்ல. Email+Password-ம் வைக்கிறீங்கன்னா அந்த Password-ஐ Argon2id-ல தான் Hash பண்ணணும்.

Refresh Token steal ஆனா என்ன பண்ணணும்?

அந்த Token family-யே Server-ல revoke பண்ணுங்க. Rotation வச்சு, பழைய Refresh மறுபடி வந்தா முழுசும் காலி பண்ணுங்க. User-ஐ மறுபடி Login கேளுங்க.

HttpOnly Cookie CSRF-ல இருந்து காக்குமா?

காக்காது. HttpOnly XSS-ல Cookie lift ஆகாது. CSRF-க்கு SameSite=lax அல்லது csrf token வேணும். ரெண்டும் வேற பிரச்சனை.

நாளைய டெக் செய்திகள் உங்க WhatsApp-க்கே

தினமும் ஒரு சின்ன update, இலவசம். TamilTech channel-ஐ follow பண்ணுங்க.

What do you think?

people reacted

Keerthika

தமிழ்டெக் எடிட்டோரியல் டீம் · 3,737 கட்டுரைகள்

Keerthika is an editor at TamilTech, the Tamil and English technology publication founded by Praveen Kumar S. She covers AI, smartphones, gadgets, EVs, startups and cybersecurity i...

மேலும் Keerthika

WhatsApp-ல் TamilTech-ஐக் கேளுங்க

டெக் சந்தேகமா? தமிழிலோ ஆங்கிலத்திலோ கேளுங்க — எங்க WhatsApp அசிஸ்டன்ட் TamilTech கட்டுரைகளில் இருந்து சில நொடிகளில் பதில் சொல்லும்.

தொடர்புடைய செய்திகள்

கருத்துகள் (0)

| Supports **bold**, *italic*, `code`

Be the first to comment!

அடுத்த செய்தி TypeScript Generics மற்றும் Utility Types: API Response-ஐ தலைவலி இல்லாம Type செய்வது எப்படி?
TamilTech

TamilTech

Install app for faster access

Earn XP 🏆
WhatsApp
Notifications