JSON वेब टोकन (JWT)

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

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

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

हस्ताक्षर वाले 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 के साथ JWT

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

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

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