JSON वेब टोकन (JWT)

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

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

  • Tink, सिर्फ़ JWS कॉम्पैक्ट सीरियलाइज़ेशन फ़ॉर्मैट के साथ काम करता है. JWS JSON सीरियलाइज़ेशन और JWE काम नहीं करते.
  • alg हेडर में Tink, 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 Sets फ़ॉर्मैट में और उससे बदलने की अनुमति देता है. हालांकि, JWT की ज़्यादातर लाइब्रेरी इस फ़ॉर्मैट को समझते हैं.

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

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

JWT MAC

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

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

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