JWT Authentication របៀបដែល JSON Web Tokens ដំណើរការយ៉ាងពិតប្រាកដ
ស្វែងយល់ពីរបៀបដែល JWT (JSON Web Token) ដំណើរការយ៉ាងស៊ីជម្រៅ ចាប់ពីការ Login, រចនាសម្ព័ន្ធ Header, Payload, Signature រហូតដល់ Security Best Practices និង Token Validation សម្រាប់ API របស់អ្នក។
JWT Authentication របៀបដែល JSON Web Tokens ដំណើរការយ៉ាងពិតប្រាកដ
អ្នកប្រហែលជាធ្លាប់ប្រើ JWT នៅក្នុងការអភិវឌ្ឍ APIs រួចមកហើយ។ ប៉ុន្តែតើមានអ្វីកើតឡើងពិតប្រាកដ បន្ទាប់ពី User ចុចប៊ូតុង “Login”?
- តើ Token ត្រូវបានបង្កើតឡើងដោយរបៀបណា?
- តើ API ដឹងដោយរបៀបណាថាវាត្រឹមត្រូវ (Valid)?
- ហើយតើវាសម្រេចចិត្តយ៉ាងដូចម្តេចថា User នោះមានសិទ្ធិ (Authorized) ឬអត់?
តោះមកបំបែកមើល Process និង Flow ទាំងមូលទាំងអស់គ្នា!
តើអ្វីជា JWT?
JWT មកពីពាក្យពេញថា JSON Web Token។
វាជាទម្រង់ទិន្នន័យ (Format) មួយដែលមានទំហំតូច (Compact) និងសុវត្ថិភាពសម្រាប់ផ្ញើតាម URL (URL-safe) ប្រើប្រាស់សម្រាប់តំណាងឱ្យ Claims ដែលអាចត្រូវ Digitally Signed និងផ្ទៀងផ្ទាត់ (Verify) បាន។
JWT ត្រូវបានគេប្រើប្រាស់ជាទូទៅសម្រាប់ Authentication និង Authorization នៅក្នុង APIs, Distributed Systems, OAuth 2.0 និង OpenID Connect។
រចនាសម្ព័ន្ធរបស់ JWT (JWT Structure)
ជាទូទៅ Signed JWT មានទម្រង់ជា ៣ ផ្នែកជាប់គ្នាដោយចុច . ដូចជា៖
xxxxx.yyyyy.zzzzz
វាចែកចេញជា ៣ ផ្នែកសំខាន់ៗ៖
1. Header
- Token type: ប្រភេទនៃ Token (ឧទាហរណ៍៖
JWT) - Signing algorithm: Algorithm ដែលប្រើសម្រាប់ Sign (ឧទាហរណ៍៖
HS256,RS256) - Key identifier (
kid): អត្តសញ្ញាណ Key ប្រើប្រាស់ពេលចាំបាច់
2. Payload
មានផ្ទុកនូវ Claims ផ្សេងៗដូចជា៖
sub(Subject) — អត្តសញ្ញាណរបស់ Useriss(Issuer) — អ្នកចេញ Tokenaud(Audience) — អ្នកទទួល Token យកទៅប្រើexp(Expiration) — ពេលវេលាផុតកំណត់iat(Issued At) — ពេលវេលាចេញ Token- Roles / Permissions — តួនាទី ឬសិទ្ធិរបស់ User
3. Signature
ប្រើប្រាស់សម្រាប់ផ្ទៀងផ្ទាត់ថា Token ត្រូវបាន Sign ដោយប្រភពដែលអាចទុកចិត្តបាន (Trusted Party) និងមិនត្រូវបានគេកែបន្លំទិន្នន័យ (Modified) តាមផ្លូវឡើយ។
“⚠️ ចំណុចសំខាន់៖ Base64URL Encoding មិនមែនជាការ Encryption នោះទេ! នរណាក៏ដោយដែលមាន JWT គឺអាច Decode មើល Header និង Payload របស់វាបានទាំងអស់។
របៀបដែល JWT Authentication ដំណើរការ
[ Client ] ---> (1) Credentials ---> [ Auth Server ]
[ Client ] <--- (2) Issue JWT <--- [ Auth Server ]
|
(3) Call API with Bearer Token
v
[ API Server ] ---> (4) Validate Token & Authorize ---> [ Response ]
- User Logs In: Client ផ្ញើ Credentials (username/password) ទៅកាន់ Authentication Server។
- Credentials Are Verified: Server ផ្ទៀងផ្ទាត់ Credentials របស់ User។
- Access Token Is Issued: Server បង្កើត និង Sign លើ JWT ដែលមានផ្ទុក Claims ដែលចាំបាច់។
- Token Is Sent to the Client: Client ទទួលបាន និងរក្សាទុក Access Token ដោយសុវត្ថិភាព (Secure Storage)។
- Client Calls the API: Client ផ្ញើ Request ទៅ API ដោយភ្ជាប់ Token តាមរយៈ Header:
Authorization: Bearer <token> - API Validates the Token: API ពិនិត្យមើលចំណុចសំខាន់ៗដូចជា៖
- Signature ត្រឹមត្រូវឬទេ
- Algorithm ដែលអនុញ្ញាត
- Expiration Time (មិនទាន់ផុតកំណត់)
- Issuer (
iss) និង Audience (aud) - Claims ដែលត្រូវការ
- Authorization Happens: បន្ទាប់ពី Authentication ជោគជ័យ API នឹងពិនិត្យមើលថា Identity នោះមានសិទ្ធិ (Permissions) ក្នុងការ perform នូវ operation នោះដែរឬទេ (Authorization)។
ហេតុអ្វីត្រូវប្រើប្រាស់ JWT?
- Stateless: មិនចាំបាច់រក្សាទុក Session នៅលើ Server សម្រាប់រាល់ Request ឡើយ
- Compact: មានទំហំតូច និងងាយស្រួលក្នុងការផ្ញើតាម HTTP Headers
- Distributed Friendly: ដំណើរការបានយ៉ាងល្អជាមួយ APIs និង Distributed Systems / Microservices
- Standardized: អាចផ្ទុក Standardized Claims ដែលងាយស្រួលយល់ និងប្រើប្រាស់
- Versatile: សមស្របសម្រាប់ Client ច្រើនប្រភេទ (Web, Mobile, IoT, Third-party apps)
វិធានការសុវត្ថិភាពសម្រាប់ JWT (Security Best Practices)
ដើម្បីការពារ System របស់អ្នកឱ្យមានសុវត្ថិភាពខ្ពស់ ត្រូវអនុវត្តតាមវិធានការទាំងនេះ៖
- ត្រូវប្រើប្រាស់ HTTPS ជានិច្ចដើម្បីការពារ Token មិនឱ្យត្រូវគេប្រាក់ចាប់តាមផ្លូវ (Interception)
- កំណត់អាយុកាលរបស់ Access Tokens ឱ្យខ្លី (Short-lived)
- ផ្ទៀងផ្ទាត់
iss(Issuer) និងaud(Audience) ឱ្យបានត្រឹមត្រូវ - ផ្ទៀងផ្ទាត់កាលបរិច្ឆេទផុតកំណត់ (
exp) ជាប្រចាំ - កំណត់ Explicit Allowed Signing Algorithms (ចៀសវាងការប្រើ algorithm
none) - រក្សាទុក Signing Keys ឱ្យមានសុវត្ថិភាពខ្ពស់បំផុត
- គ្រប់គ្រង Refresh Tokens ឱ្យបានត្រឹមត្រូវ និងមានសុវត្ថិភាព
- ដាច់ខាតកុំដាក់ Passwords, Secrets, ឬ sensitive data ផ្សេងៗនៅក្នុង Normal JWT
លំហូរទូទៅនៃ Process ទាំងមូល (Summary Flow)
Login → Authenticate → Issue Token → Send Token → Validate Token → Authorize Request → API Response
បន្ទាប់ពីយល់ពី Process នេះហើយ ការ Implement JWT Authentication នៅក្នុង ASP .NET Core APIs ឬ Distributed Systems នឹងកាន់តែងាយស្រួល និងច្បាស់លាស់ជាងមុន។
តើអ្នកធ្លាប់ Implement JWT Authentication នៅក្នុង Project របស់អ្នកដែរឬទេ? តើចំណុចណាដែលលំបាក ឬជាប្រឈមជាងគេសម្រាប់អ្នក?
អ្វីដែលធ្វើឲ្យ អ្នកសរសេរកូដ ខុសគេក្នុងសម័យ AI?
AI អាចសរសេរ code ឲ្យអ្នកបានលឿនក៏ពិតមែន ប៉ុន្តែសម្រាប់អ្នករៀនថ្មី ការពឹងផ្អែកលើវាខ្លាំងពេក អាចធ្វើឲ្យសិស្សថ្មីថ្មោងចេះមិនប្រាកដ។ ស្វែងយល់ពីរបៀបប្រើ AI ជា "គ្រូ" ដោយសុវត្ថិភាព និងជំនាញដែលធ្វើឲ្យអ្នកខុសគេពីអ្នកដទៃក្នុងសម័យ AI។
អានបន្ត
មតិយោបល់ (0)