JSON वेब टोकन (JWT)

Tink, JWT जनरेट करने और उनकी पुष्टि करने की सुविधा देता है. ये वेब पर बड़े पैमाने पर इस्तेमाल किए जाने वाले स्टैंडर्ड हैं. Tink के जेडब्लयूटी लागू करने की सुविधा, RFC 7519 में बताए गए जेडब्लयूटी स्टैंडर्ड का सबसेट उपलब्ध कराती है. Tink की टीम का मानना है कि इसका इस्तेमाल करना सुरक्षित है और यह Tink लाइब्रेरी के साथ अच्छी तरह से काम करती है.

Tink, स्टैंडर्ड के उन हिस्सों के साथ काम नहीं करता जिन्हें शायद ही कभी इस्तेमाल किया जाता है या जिन्हें सही तरीके से इस्तेमाल करना मुश्किल होता है. ये सीमाएं हैं:

  • Tink सिर्फ़ JWS कॉम्पैक्ट सीरियलाइज़ेशन फ़ॉर्मैट के साथ काम करता है. JWS JSON Serialization और JWE का इस्तेमाल नहीं किया जा सकता.
  • Tink, alg हेडर में None वैल्यू का इस्तेमाल नहीं करता.
  • Tink सिर्फ़ typ, alg, और kid हेडर के साथ काम करता है. अन्य सभी हेडर का इस्तेमाल नहीं किया जा सकता.
  • Tink, हस्ताक्षर या एमएसी की पुष्टि होने से पहले, टोकन को पार्स करने की अनुमति नहीं देता.

JWT हस्ताक्षर

अगर टोकन अलग-अलग इकाइयों से जनरेट और पुष्टि किए जाते हैं, तो आपको प्राइमिटिव JwtPublicKeySign और JwtPublicKeyVerify के साथ असिमेट्रिक पासकोड का इस्तेमाल करना चाहिए. निजी कुंजी का इस्तेमाल टोकन जनरेट करने के लिए किया जाता है और सार्वजनिक कुंजी का इस्तेमाल टोकन की पुष्टि करने के लिए किया जाता है. इन प्राइमिटिव के साथ काम करने वाले ऐल्गोरिदम ये हैं: ES256, ES384, ES512, RS256, RS384, RS512, PS256, PS384, और PS512.

कुंजी का टाइप चुनना

JWT हस्ताक्षर, Tink में मौजूद सामान्य डिजिटल हस्ताक्षर के मुकाबले, अलग तरह की कुंजियों का इस्तेमाल करते हैं. ऐसा इसलिए ज़रूरी है, क्योंकि कुछ मेटाडेटा (जैसे कि algऔर kid) को कुंजी के साथ सेव करना होता है.

हमारा सुझाव है कि ज़्यादातर इस्तेमाल के उदाहरणों के लिए, JWT_ES256 का इस्तेमाल करें. इस तरह के पासकोड से जनरेट किए गए टोकन में हमेशा kid हेडर होता है. अगर आपको kid हेडर के बिना थोड़े छोटे टोकन चाहिए, तो कुंजी का टाइप JWT_ES256_RAW चुनें. इस्तेमाल किए जा सकने वाले सभी तरह के बटन के लिए, इस्तेमाल किए जा सकने वाले बटन के टाइप देखें.

सार्वजनिक पासकोड का डिस्ट्रिब्यूशन

Tink की मदद से, सार्वजनिक पासकोड को RFC 7517 में बताए गए JWK सेट फ़ॉर्मैट में बदला जा सकता है. साथ ही, इस फ़ॉर्मैट से सार्वजनिक पासकोड को वापस भी बदला जा सकता है. ज़्यादातर JWT लाइब्रेरी इस फ़ॉर्मैट को समझती हैं.

Tink, सार्वजनिक JWT पासकोड को किसी दूसरे फ़ॉर्मैट में एक्सपोर्ट नहीं कर सकता. इसकी वजह यह है कि दूसरे फ़ॉर्मैट में, पुष्टि करने के लिए इस्तेमाल किए जाने वाले alg और kid मेटाडेटा का इस्तेमाल नहीं किया जा सकता. इस वजह से, इनका इस्तेमाल करने पर गड़बड़ियां होने की संभावना ज़्यादा होती है. साथ ही, हो सकता है कि पासकोड बदलना ज़्यादा मुश्किल हो जाए.

सार्वजनिक पासकोड सेट को सिर्फ़ एक बार शेयर करने के बजाय, उसे अपने-आप अपडेट करने का तरीका उपलब्ध कराना बेहतर होता है. (अगर ऐसा नहीं है, तो नई कुंजी पर स्विच करना बहुत मुश्किल है.) आम तौर पर, सार्वजनिक पासकोड को किसी भरोसेमंद और सुरक्षित यूआरएल पर पब्लिश करके ऐसा किया जाता है. टोकन की पुष्टि करने वाले सर्वर को समय-समय पर उस यूआरएल से सार्वजनिक पासकोड फिर से फ़ेच करना पड़ता है. उदाहरण के लिए, हर दिन एक बार. कुंजी को रोटेट करने के लिए, टोकन पर हस्ताक्षर करने के कम से कम एक दिन पहले, नई सार्वजनिक कुंजी को सार्वजनिक पासकोड सेट में जोड़ना ज़रूरी है. ऐसा न करने पर, नई निजी कुंजी से साइन किए गए नए टोकन को ऐसे सर्वर अस्वीकार कर देंगे जो अब भी पुराने सार्वजनिक पासकोड का इस्तेमाल करते हैं.

JWT MAC

Tink, प्रिमिटिव JwtMac के साथ सिमेट्रिक कुंजियों वाले JWT के साथ भी काम करता है. इस प्राइमिटिव का इस्तेमाल सिर्फ़ तब करें, जब टोकन एक ही इकाई ने जनरेट किए हों और उनकी पुष्टि की हो. इस प्रिमाइटिव के साथ ये एल्गोरिदम काम करते हैं: HS256, HS384, और HS512.

कुंजी का टाइप चुनना

JWT MAC पासकोड के टाइप, सामान्य MAC पासकोड के टाइप से अलग होते हैं. हमारा सुझाव है कि ज़्यादातर मामलों में, JWT_HS256 का इस्तेमाल करें.

इस्तेमाल के उदाहरण

मुझे JWT बनाना और उनकी पुष्टि करनी है लेख पढ़ें.