JWT Authentication
JWT क्या है
JWT (JSON Web Token) APIs के लिए login संभालने का तरीका है। user के login के बाद, server एक signed token बनाता है और client को देता है। client यह token हर आगे की request के साथ भेजता है यह साबित करने को कि वो कौन है — तो server को हर user के लिए session store नहीं करना पड़ता।
Token के तीन हिस्से
JWT xxxxx.yyyyy.zzzzz जैसा दिखता है — dots से अलग तीन हिस्से।
| हिस्सा | क्या रखता है |
|---|---|
| Header | signing algorithm (जैसे HS256) |
| Payload | Data — जैसे user id और expiry |
| Signature | जाँच कि token से छेड़छाड़ नहीं हुई |
Header और payload बस base64-encoded हैं (पढ़ने योग्य), जबकि signature सिर्फ़ server को पता secret key इस्तेमाल करता है।
JWT login कैसे काम करता है
- User email और password से login करता है।
- Server उन्हें जाँचता है और, सही होने पर, signed JWT बनाता है।
- Client token store करता है और हर request के header में भेजता है।
- Server signature verify करता है और token से user id पढ़ता है।
- कोई server-side session नहीं चाहिए — token ही सबूत ले जाता है।
JWT library इस्तेमाल करना
JWTs हाथ से मत बनाइए — firebase/php-jwt जैसी भरोसेमंद library इस्तेमाल कीजिए।
<?php
use Firebase\JWT\JWT;
$key = "your-secret-key";
$payload = ["user_id" => 5, "exp" => time() + 3600];
$token = JWT::encode($payload, $key, "HS256");
echo $token; // xxxxx.yyyyy.zzzzz
?>
JWT::encode payload को आपकी secret key से sign करता है। exp field expiry set करता है (यहाँ एक घंटा), जिसके बाद token मान्य नहीं रहता।
Token verify करना
<?php
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
try {
$decoded = JWT::decode($token, new Key($key, "HS256"));
echo "User id: " . $decoded->user_id;
} catch (Exception $e) {
echo "Invalid or expired token";
}
?>
हर protected request पर token decode और verify कीजिए। अगर signature गलत हो या expire हो गया हो, decoding error देता है और आप request ठुकरा देते हैं।
आम गलतियाँ
- Payload में secrets डालना। यह पढ़ने योग्य है — passwords या sensitive data वहाँ कभी मत रखिए।
- अपना JWT code लिखना। forgeable tokens बचाने को tested library इस्तेमाल कीजिए।
- कोई expiry नहीं। हमेशा
expset कीजिए ताकि पुराने tokens काम करना बंद करें। - कमज़ोर या उजागर secret key। key मज़बूत रखिए और अपने code repository से बाहर।
सारांश
- JWT token-based login है, stateless APIs के लिए आदर्श।
- Token के तीन हिस्से: header, payload, signature।
- यह signed (tamper-proof) है पर encrypted नहीं (पढ़ने योग्य)।
- encode और verify को firebase/php-jwt जैसी library इस्तेमाल कीजिए।
- हमेशा expiry set कीजिए और secret key सुरक्षित रखिए।
आगे, data layer सुरक्षित कीजिए prepared statements से, या तुलना कीजिए sessions और cookies से।
