ከእርስዎ የማረጋገጫ አቅራቢ የመጣ ቶከንን መመርመር
Auth0, Firebase, Keycloak, AWS Cognito ሁሉም ከመግቢያ በኋላ JWTs ይመልሳሉ። መተግበሪያዎ በትክክል ምን ክሌሞችን እንደሚቀበል ለማየት access_token ይለጥፉ — የተጠቃሚ መታወቂያው ምንድነው፣ ስኮፖቹ ምንድ ናቸው፣ መቼ ያበቃል?
ማንኛውንም JSON Web Token ዲኮድ በማድረግ ራስጌውን፣ ይዘቱን እና ፊርማውን ይዩ — ወይም በHS256/384/512 አዲስ ቶከን ይፈርሙ። የHMAC ፊርማዎችን በአካባቢው ያረጋግጣል። 100% በአሳሽዎ ውስጥ።
ማንኛውንም JSON Web Token ዲኮድ በማድረግ ራስጌውን፣ ይዘቱን እና ፊርማውን ይዩ — ወይም በHS256/384/512 አዲስ ቶከን ይፈርሙ። የHMAC ፊርማዎችን በአካባቢው ያረጋግጣል። 100% በአሳሽዎ ውስጥ።
አይ። ሙሉው መሣሪያ በዚህ ገጽ ውስጥ ያለ JavaScript ነው። ቶከን ይለጥፋሉ፣ ዲኮድ በአሳሽዎ ውስጥ ይከሰታል፣ ባይቶቹ ከታብ በፍጹም አይወጡም። DevTools → Network ይክፈቱ እና ይመልከቱ — በዲኮድ ወይም በማረጋገጫ ጊዜ ምንም ጥያቄዎች አይላኩም። ይህ እውነተኛ የደንበኛ ወይም የምርት ቶከኖችን ለመለጠፍ ደህንነቱ የተጠበቀ ያደርገዋል።
ቶከኑ ሚስጥሩን (HMAC) ወይም የግል ቁልፍ (RSA/ECDSA) በያዘ ሰው የተፈረመ መሆኑን ያረጋግጣል። ይዘቱን አያመስጥርም — ራስጌው እና ይዘቱ በቀላሉ base64url-encoded JSON ናቸው፣ ቶከኑ ያለው ሁሉ ሊያነባቸው ይችላል። ፊርማው ማስተካከልን ብቻ ያቆማል፦ የይዘቱን አንድ ባይት እንኳን ቢቀይሩ፣ ፊርማው ከእንግዲህ አይዛመድም።
JWT ብዙ ጊዜ የተጠቃሚ መታወቂያን፣ ኢሜይልን፣ ስኮፖችን እና አንዳንዴ ከክፍለ ጊዜ ኩኪዎች ጋር እኩል የሆነ ይይዛል — በትክክል ወደ እንግዳ ሰው ሰርቨር መለጠፍ የሌለብዎት ውሂብ። የiKit ዲኮደር በአሳሽ ታብዎ ውስጥ አስቀድሞ የተጫነ JavaScript እንደመሆኑ ይሰራል። በDevTools → Network ሊረጋገጥ ይችላል፦ በዲኮድ ወይም በማረጋገጫ ጊዜ ምንም fetch፣ ምንም XHR፣ ምንም beacon የለም።
ለHS256/384/512 ቶከኖች፣ ፊርማውን በአካባቢው ለማረጋገጥ የመፈረሚያ ሚስጥሩን ይተይቡ። ለRS256/ES256 (RSA/ECDSA)፣ የሰርቨር ላይብረሪ ይጠቀሙ — የሕዝብ ቁልፍ ማረጋገጫ እዚህ የማንቀበለውን PEM ፋይል ይፈልጋል።
HS256 ለእውነተኛ ክሪፕቶግራፊክ ጥንካሬ ቢያንስ 32 ባይት (256 ቢት) ይፈልጋል። ለሙከራ ማንኛውም ይሰራል፣ ግን ምርት ላይ ረጅም በዘፈቀደ የተፈጠረ ሚስጥር መጠቀም አለበት።
JWT ለማረም በጣም ፈጣን መንገድ — ምንም መጫን፣ ምንም ምዝገባ፣ በእርስዎና በቶከንዎ መካከል ሶስተኛ ወገን የለም።
JWT ይለጥፉ፣ የተፈታውን ራስጌ፣ ይዘት እና ፊርማ ጎን ለጎን ይዩ። መደበኛ ክሌሞች (iss, sub, aud, exp, iat) ጊዜ ምልክት ተደርጎባቸው እና ስም ተሰጥቷቸዋል።
ለHS256/384/512 ቶከኖች፣ የአሳሹን Web Crypto API በመጠቀም ፊርማውን ለማረጋገጥ ሚስጥሩን ይተይቡ። ሚስጥሩ ከታብዎ በፍጹም አይወጣም።
ወደ Encode ሁነታ ይቀይሩ፣ ራስጌውን እና ይዘቱን እንደ JSON ያርትዑ፣ አልጎሪዝም ይምረጡ፣ ሚስጥር ይተይቡ፣ ወዲያውኑ የተፈረመ ቶከን ያግኙ።
የJWT ይዘቶች የተጠቃሚ መታወቂያዎች፣ ኢሜይሎች፣ አንዳንዴ ስኮፖችን ይይዛሉ — በፍጹም ወደ ሰርቨር መሣሪያ አይለጥፉ። የiKit ዲኮደር በአሳሽዎ ውስጥ እንደ JavaScript ይሰራል። በDevTools → Network ውስጥ ሊረጋገጥ ይችላል።
exp, nbf, iat ያሉ መደበኛ ክሌሞች በሰው ሊነበቡ በሚችሉ ቀኖች እና ግልጽ የEXPIRED / valid ባጅ ምልክት ይደረግባቸዋል፣ ስለዚህ ቶከኑ አሁንም ጥሩ መሆኑን በአንድ እይታ ማወቅ ይችላሉ።
በአሳሹ ቤተኛ Web Crypto API እና JSON parser ላይ የተገነባ — ከOpenSSL፣ libjwt፣ jose ጋር ተመሳሳይ አልጎሪዝሞች። ባህሪው ከእያንዳንዱ ዘመናዊ JWT ላይብረሪ ጋር ይጣጣማል።
JWT በነጥቦች የተለዩ ሶስት base64url-encoded JSON ክፍሎች ነው — ያው ብቻ።
JWT እንደ aaa.bbb.ccc ይመስላል። በሁለቱ ቃል በቃል ነጥቦች እንከፋፍላለን፣ የተመሰጠረውን ራስጌ፣ ይዘት እና ፊርማ ይሰጠናል። በትክክል ሶስት ክፍሎች ካላገኘን፣ ቶከኑ የተበላሸ ነው።
ራስጌ እና ይዘት base64url-encoded UTF-8 JSON ናቸው። Base64URL = Base64 ከ-/_ በምትኩ +//= እና ያለ ፓዲንግ። ቁምፊዎችን መልሰን ከተተካን በኋላ atob እናደርጋለን፣ ከዚያም የተገኘውን ሕብረቁምፊ JSON.parse እናደርጋለን።
ራስጌ አልጎሪዝሙን (alg፦ HS256, RS256, ወዘተ.) እና ዓይነቱን ይነግረናል። ይዘቱ ክሌሞቹን ይይዛል — መደበኛዎቹን (iss, sub, aud, exp, iat, nbf, jti) ከማንኛውም ብጁ መስኮች ጋር። እያንዳንዱን በስም በተሰጠው ክፍል ውስጥ እናሳያለን።
ለHS256/384/512፣ የተየቡትን ሚስጥር በመጠቀም የheader.payload HMAC ድጋሚ እናሰላለን እና በሶስተኛው ክፍል ውስጥ ካለው ፊርማ ጋር እናወዳድራለን። ከHMAC(SHA-256, secret, signing_input) base64url-encoded ጋር ተመሳሳይ ነው። ተዛመደ = ፊርማ ልክ ነው።
ለJWT ዲኮደር የሚደርሱባቸው እውነተኛ ሁኔታዎች።
Auth0, Firebase, Keycloak, AWS Cognito ሁሉም ከመግቢያ በኋላ JWTs ይመልሳሉ። መተግበሪያዎ በትክክል ምን ክሌሞችን እንደሚቀበል ለማየት access_token ይለጥፉ — የተጠቃሚ መታወቂያው ምንድነው፣ ስኮፖቹ ምንድ ናቸው፣ መቼ ያበቃል?
API ጥያቄዎን ውድቅ ያደርጋል? ቶከኑን ዲኮድ ያድርጉ ለመፈተሽ፦ ጊዜው አልፏል (exp ባለፈው)? የተቀባይ ክሌም (aud) API የሚጠብቀው ነው? ሰጪው (iss) ትክክለኛው ቴናንት ነው?
Stripe, GitHub Apps, Slack የwebhook ይዘቶችን እንደ JWTs ፈርመው ይልካሉ። አንዱን ከተቀበሉ በኋላ፣ ጥያቄው በትክክል ከእነሱ መምጣቱን ለማረጋገጥ ወደ Decode ሁነታ ከጋራ ሚስጥሩ ጋር ይለጥፉት።
ለውህደት ሙከራ ትኩስ የተፈረመ JWT ያስፈልጋል? ወደ Encode ሁነታ ይቀይሩ፣ ይዘቱን ያርትዑ (ብጁ የተጠቃሚ መታወቂያ፣ ብጁ የጊዜ ማብቂያ)፣ HS256 + የሙከራ ሚስጥርዎን ይምረጡ፣ በሚሊሰከንዶች ውስጥ ቶከን ያግኙ። የበስተጀርባ ዙር-ጉዞ የለም።
JWT ብዙ ጊዜ የተጠቃሚ መታወቂያን፣ ኢሜይልን፣ ስኮፖችን እና አንዳንዴ ከክፍለ ጊዜ ኩኪዎች ጋር እኩል የሆነ ይይዛል — በትክክል ወደ እንግዳ ሰው ሰርቨር መለጠፍ የሌለብዎት ውሂብ። የiKit ዲኮደር በአሳሽ ታብዎ ውስጥ አስቀድሞ የተጫነ JavaScript እንደመሆኑ ይሰራል። በDevTools → Network ሊረጋገጥ ይችላል፦ በዲኮድ ወይም በማረጋገጫ ጊዜ ምንም fetch፣ ምንም XHR፣ ምንም beacon የለም።
ከ iKit ብሎግ ጥልቅ ትምህርቶች እና የመሳሪያ ንፅፅሮች።
JWT segments are base64url-encoded JSON — understand the encoding before you debug a token.
JWT signatures are HMAC-SHA hashes — the same family of cryptographic hashes used to verify file integrity.
አይ። ሙሉው መሣሪያ በዚህ ገጽ ውስጥ ያለ JavaScript ነው። ቶከን ይለጥፋሉ፣ ዲኮድ በአሳሽዎ ውስጥ ይከሰታል፣ ባይቶቹ ከታብ በፍጹም አይወጡም። DevTools → Network ይክፈቱ እና ይመልከቱ — በዲኮድ ወይም በማረጋገጫ ጊዜ ምንም ጥያቄዎች አይላኩም። ይህ እውነተኛ የደንበኛ ወይም የምርት ቶከኖችን ለመለጠፍ ደህንነቱ የተጠበቀ ያደርገዋል።
ቶከኑ ሚስጥሩን (HMAC) ወይም የግል ቁልፍ (RSA/ECDSA) በያዘ ሰው የተፈረመ መሆኑን ያረጋግጣል። ይዘቱን አያመስጥርም — ራስጌው እና ይዘቱ በቀላሉ base64url-encoded JSON ናቸው፣ ቶከኑ ያለው ሁሉ ሊያነባቸው ይችላል። ፊርማው ማስተካከልን ብቻ ያቆማል፦ የይዘቱን አንድ ባይት እንኳን ቢቀይሩ፣ ፊርማው ከእንግዲህ አይዛመድም።
ሶስት የተለመዱ ምክንያቶች፦ (1) የተሳሳተ ሚስጥር — የJWT ሚስጥሮች ለፊደል መጠን ስሱ ናቸው እና ማንኛውም የነጭ ቦታ አለመጣጣም ማረጋገጫን ያበላሻል። (2) የአልጎሪዝም አለመመጣጠን — ራስጌው HS256 ይላል ነገር ግን ሚስጥሩ መጀመሪያ ከHS512 ጋር ጥቅም ላይ ውሏል። (3) ቶከኑ ከተፈረመ በኋላ ተስተካክሏል — አንድ ባይት እንኳን ፊርማውን ይሰብራል። header.alg ከሚጠብቁት ጋር ይዛመድ መሆኑን ያረጋግጡ።
iKit በአሁኑ ጊዜ የHMAC ማረጋገጫ (HS256/384/512) ብቻ ይደግፋል። RS256 እና ES256 የሕዝብ ቁልፍ ክሪፕቶግራፊን ይጠቀማሉ — ማረጋገጫ የሰጪውን የሕዝብ ቁልፍ በPEM ቅርጸት ይፈልጋል፣ ይህም የበለጠ የተወሳሰበ UI ነው። ለአሁን፣ ዲኮዲንግ አሁንም ይሰራል (የራስጌ/ይዘት/ፊርማ ክፍሎች በትክክል ይታያሉ)፣ ግን የVerify ቁልፍ ያልተደገፈ መሆኑን ይነግርዎታል። የRSA/ECDSA ማረጋገጫ ታቅዷል።
ተመሳሳይ ሀሳብ፣ የተለያዩ ነባሪዎች። የiKit ዲኮደር ሙሉ በሙሉ በአሳሽዎ ውስጥ ይሰራል (jwt.io እንዲሁ ያደርጋል፣ ግን የiKit ኮድ ለview-source ክፍት ነው እና ጎራችን ሶስተኛ ወገን ተከታታዮች የሉትም)። ለexp ክሌም ግልጽ የEXPIRED / valid ባጅ፣ የተዋቀሩ የክሌም ማስታወሻዎች (iat / nbf / iss / sub / aud / jti እንደ ሊነበቡ የሚችሉ ረድፎች) እና ሙሉ የተዋቀረ ውጤት ወደ የስህተት ሪፖርት ለመለጠፍ የሚሰጥ የተፈታውን-ሁሉ-ይቅዱ ቁልፍን እንጨምራለን።