JWT ഡീകോഡർ
ജെഎസ്ഒഎൻ വെബ് ടോക്കൺ (JWT) എന്നത് മിക്കവാറും എല്ലാ ആധുനിക ഓതന്റിക്കേഷൻ സിസ്റ്റങ്ങളിലും - OAuth ആക്സസ് ടോക്കണുകൾ, സിംഗിൾ-പേജ് ആപ്പുകൾക്കുള്ള സെഷൻ കുക്കികൾ, മൈക്രോസർവീസുകൾക്കിടയിൽ കൈമാറ്റം ചെയ്യപ്പെടുന്ന API കീകൾ എന്നിവയിലും - ഉപയോഗിക്കുന്ന ഒരു കോംപാക്റ്റ്, URL-സുരക്ഷിതമായ ടോക്കൺ ഫോർമാറ്റാണ്. ഈ ടൂൾ ഒരു JWT-യെ അതിന്റെ സ്വന്തം ഉള്ളടക്കത്തിൽ നിന്ന് പൂർണ്ണമായും ഡീകോഡ് ചെയ്യുന്നു: ഇത് ഹെഡറും പേലോഡും വായിക്കുന്നു, സൈനിംഗ് അൽഗോരിതം കണ്ടെത്തുന്നു, ടോക്കൺ കാലഹരണപ്പെട്ടോ എന്ന് പരിശോധിക്കുന്നു, കൂടാതെ സ്റ്റാൻഡേർഡ് ക്ലെയിമുകൾ വായിക്കാവുന്ന ഒരു പട്ടികയിൽ പട്ടികപ്പെടുത്തുന്നു.
എന്താണ് JWT?
ഡോട്ടുകൾ ചേർത്ത മൂന്ന് Base64URL-എൻകോഡ് ചെയ്ത ഭാഗങ്ങളാണ് ഒരു JWT:
- ഹെഡർ - സൈനിംഗ് അൽഗോരിതവും (
alg) ടോക്കൺ തരവും (typ) വ്യക്തമാക്കുന്ന ഒരു ചെറിയ JSON ഒബ്ജക്റ്റ്, ഉദാ.{"alg":"HS256","typ":"JWT"} - പേലോഡ് - ക്ലെയിമുകളുടെ ഒരു JSON ഒബ്ജക്റ്റ്: ആപ്ലിക്കേഷൻ-നിർദ്ദിഷ്ട ഡാറ്റയ്ക്കൊപ്പം
exp(കാലാവധി),iat(ഇഷ്യൂ ചെയ്ത സമയം),sub(വിഷയം) പോലുള്ള സ്റ്റാൻഡേർഡ് രജിസ്റ്റർ ചെയ്ത ക്ലെയിമുകൾ - സിഗ്നേച്ചർ - ഹെഡറും പേലോഡും ഒരു രഹസ്യമോ സ്വകാര്യ കീയോ ഉപയോഗിച്ച് ഒപ്പിട്ട് കണക്കാക്കുന്നു, അതിനാൽ സ്വീകരിക്കുന്ന സെർവറിന് ടോക്കൺ കൃത്രിമം കാണിച്ചിട്ടില്ലെന്ന് സ്ഥിരീകരിക്കാൻ കഴിയും
ഹെഡറും പേലോഡും എൻകോഡ് ചെയ്തവ മാത്രമാണ്, എൻക്രിപ്റ്റ് ചെയ്തവയല്ല - JWT കൈവശമുള്ള ആർക്കും അതിന്റെ ഉള്ളടക്കം വായിക്കാൻ കഴിയും, ഇതുതന്നെയാണ് ഈ ടൂൾ ചെയ്യുന്നത്.
ഈ ടൂൾ എങ്ങനെ പ്രവർത്തിക്കുന്നു
- ടോക്കണിനെ
.എന്നതിൽ മൂന്ന് ഭാഗങ്ങളായി വിഭജിക്കുകയും കൃത്യമായി മൂന്ന് ഭാഗങ്ങൾ ഇല്ലാത്തതെല്ലാം നിരസിക്കുകയും ചെയ്യുന്നു - ഹെഡർ, പേലോഡ് ഭാഗങ്ങൾ Base64URL-ഡീകോഡ് ചെയ്ത് ഓരോന്നും JSON ആയി പാഴ്സ് ചെയ്യുന്നു
- ഡീകോഡ് ചെയ്ത ഹെഡറിൽ നിന്ന്
alg,typഎന്നിവ വായിക്കുന്നു - പേലോഡിൽ ഒരു സംഖ്യാ
expക്ലെയിം ഉണ്ടെങ്കിൽ, അതിനെ നിലവിലെ സമയവുമായി താരതമ്യം ചെയ്ത് ടോക്കൺ സാധുവാണോ കാലഹരണപ്പെട്ടോ എന്നും എത്ര സമയമായി എന്നും റിപ്പോർട്ട് ചെയ്യുന്നു - പേലോഡിലുള്ള സ്റ്റാൻഡേർഡ് രജിസ്റ്റർ ചെയ്ത ക്ലെയിമുകൾ (
iss,sub,aud,exp,iat,nbf,jti) ഒരു പട്ടികയിലേക്ക് എടുക്കുന്നു, യൂണിക്സ് ടൈംസ്റ്റാമ്പുകളെ വായിക്കാവുന്ന തീയതികളാക്കി മാറ്റുന്നു
ഈ ടൂൾ ഒരിക്കലും സിഗ്നേച്ചർ പരിശോധിക്കുന്നില്ല - അതിന് സൈനിംഗ് രഹസ്യമോ പബ്ലിക് കീയോ ആവശ്യമാണ്, ഇത് ഈ ടൂൾ ഒരിക്കലും ചോദിക്കുകയോ കാണുകയോ ചെയ്യുന്നില്ല. ടോക്കൺ കൈവശമുള്ള ആർക്കും ഇതിനകം സാധാരണ ടെക്സ്റ്റായി ലഭ്യമായ ഭാഗങ്ങൾ മാത്രമേ ഇത് ഡീകോഡ് ചെയ്ത് പരിശോധിക്കുന്നുള്ളൂ.
ഉദാഹരണം
മുകളിലുള്ള ഫീൽഡിൽ ഈ പ്രശസ്തമായ സാമ്പിൾ ടോക്കൺ (jwt.io-ലും ഉപയോഗിക്കുന്നത്) പേസ്റ്റ് ചെയ്ത് സമർപ്പിക്കുക:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
ഇത് ഡീകോഡ് ചെയ്യുമ്പോൾ ലഭിക്കുന്നത്:
- ഹെഡർ:
{"alg":"HS256","typ":"JWT"} - പേലോഡ്:
{"sub":"1234567890","name":"John Doe","iat":1516239022} - സ്റ്റാറ്റസ്: കാലാവധി ക്ലെയിം ഇല്ല - ഈ ടോക്കൺ ഒരിക്കലും കാലഹരണപ്പെടില്ല
- ക്ലെയിമുകളുടെ പട്ടിക:
sub(വിഷയം) =1234567890,iat(ഇഷ്യൂ ചെയ്ത സമയം) = ടൈംസ്റ്റാമ്പ് വായിക്കാവുന്ന UTC തീയതിയാക്കി മാറ്റിയത്
ഇത് എന്തുകൊണ്ട് പ്രധാനമാണ്
ഒരു തേർഡ്-പാർട്ടി വെബ്സൈറ്റിൽ JWT പേസ്റ്റ് ചെയ്യാതെ തന്നെ അത് പരിശോധിക്കാൻ കഴിയുന്നത്, ഓതന്റിക്കേഷൻ ഡീബഗ് ചെയ്യുമ്പോൾ വളരെ ഉപകാരപ്രദമാണ്: ഒരു API യഥാർത്ഥത്തിൽ ഏത് അൽഗോരിതത്തിലാണ് ഒപ്പിടുന്നതെന്ന് സ്ഥിരീകരിക്കുക, ക്ലയന്റിനെ കുറ്റപ്പെടുത്തുന്നതിന് മുമ്പ് ആക്സസ് ടോക്കൺ കാലഹരണപ്പെട്ടോ എന്ന് പരിശോധിക്കുക, അല്ലെങ്കിൽ നിങ്ങളുടെ ബാക്കെൻഡ് പ്രതീക്ഷിക്കുന്ന ഒരു ക്ലെയിം (aud അല്ലെങ്കിൽ ഒരു കസ്റ്റം ടെനന്റ് ID പോലുള്ളവ) നിങ്ങൾക്ക് ലഭിച്ച ടോക്കണിൽ യഥാർത്ഥത്തിൽ ഉണ്ടെന്ന് സ്ഥിരീകരിക്കുക.