"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > एक वैध JWT दावा सेट बनाना

एक वैध JWT दावा सेट बनाना

2024-11-04 को प्रकाशित
ब्राउज़ करें:424

Building a valid JWT Claims Set

पहचान

मुझे एक पुल अनुरोध की समीक्षा करने की आवश्यकता थी जो एक नमूने के साथ रिपोर्ट की गई समस्या को ठीक कर रहा था और जब परीक्षण पास हो रहे थे, तो ऐसा लगा कि नमूने के साथ कुछ और चल रहा होगा जिसे बदलने की आवश्यकता है।

मैं कुछ समय से JSON वेब टोकन (JWTs का उच्चारण "जोट्स" होता है) के बारे में जानता हूं, मैं उन्हें नहीं जानता। इस पीआर को देखकर मुझे उनके बारे में और गहराई से जानने का मौका मिला।

जेडब्ल्यूटी क्या हैं?

जेडब्ल्यूटी पार्टियों के बीच सूचना को सुरक्षित रूप से प्रसारित करने के लिए एक खुली मानक विधि है। इनका उपयोग अक्सर उपयोगकर्ताओं को प्रमाणित करने और संसाधनों तक पहुंच को अधिकृत करने के लिए किया जाता है। इनमें 3 भाग होते हैं, एक हेडर, पेलोड और हस्ताक्षर।

आपको JWTs की आवश्यकता क्यों है?

IAM सेवा खाता क्रेडेंशियल API IAM सेवा खातों का प्रतिरूपण करने के लिए अल्पकालिक क्रेडेंशियल बनाता है। साइनजेडब्ल्यूटीमेथड सेवा खाते की सिस्टम-प्रबंधित निजी कुंजी का उपयोग करके जेडब्ल्यूटी पर हस्ताक्षर करेगा। साइनजेडब्ल्यूटी विधि के अनुरोध निकाय के भीतर, पेलोड फ़ील्ड में एक क्रमबद्ध JSON ऑब्जेक्ट होना चाहिए जिसमें JWT दावा सेट शामिल हो।

JWT दावे क्या हैं?

दावे मुख्य जानकारी हैं जो JWT प्रसारित करता है।

यहां वैध दावों के सेट का एक उदाहरण दिया गया है:

{
  "iss": "https://cloud.google.com/iam",
  "sub": "projects/-/serviceAccounts/[email protected]",
  "aud": "https://my-iap-protected-app.example.com",
  "iat": 1694003600,
  "exp": 1694007200
}

इस दावा सेट में निम्नलिखित फ़ील्ड शामिल हैं:

  • iss: JWT का जारीकर्ता, सेवा खाता जो प्रमाणीकरण करेगा, इस मामले में सेवा खाता ईमेल होना चाहिए।
  • उप: JWT का उपयोगकर्ता विषय, जो सेवा खाता ईमेल है।
  • aud: JWT के दर्शक, जो IAP-संरक्षित संसाधन का URL है।
  • iat: समय पर जारी किया गया, जो वह समय है जब JWT उत्पन्न हुआ था। इसे UTC में एक पूर्णांक होना आवश्यक है।
  • ऍक्स्प: समाप्ति समय, वह समय है जब JWT अब मान्य नहीं होगा। क्लाउड IAM दस्तावेज़ों की अतिरिक्त सीमाएँ हैं: यह अतीत में नहीं हो सकता है और भविष्य में 12 घंटे से अधिक नहीं हो सकता है।

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

तो उस पीआर के बारे में

मूल कोड इस तरह दिखता था

    iat = datetime.datetime.now(tz=datetime.timezone.utc)
    exp = iat   3600
    return json.dumps(
        {
            "iss": service_account_email,
            "sub": service_account_email,
            "aud": resource_url,
            "iat": iat,
            "exp": exp,
        }
    )

मुझे पता है कि परीक्षण में कुछ गड़बड़ है लेकिन मैं इस कोड के साथ अंतर्निहित समस्या के समाधान में बाधा नहीं डालना चाहता।

पीआर लेखक ने परिवर्तन प्रस्तुत किया

iat = datetime.datetime.now(tz=datetime.timezone.utc).timestamp()

ऐसा लग रहा था कि यह अधूरा समाधान होगा। एपीआई के दस्तावेज़ीकरण के आधार पर, मुझे एहसास हुआ कि सबमिट किया गया फिक्स अभी भी iat को int टाइप करने के लिए सेट नहीं करेगा और फिर भी विफल रहेगा। मैंने एक छोटे से बदलाव का प्रस्ताव रखा है जिससे पीआर की समस्या का समाधान हो जाएगा

now_utc = datetime.datetime.now(tz=datetime.timezone.utc)  
iat = int(now_utc.timestamp())

जितना अधिक मैंने इसके बारे में सोचा, मुझे एहसास हुआ कि डेटटाइम इस नमूने के लिए उपयोगी नहीं है। डेटटाइम मॉड्यूल तारीखों और समय में हेरफेर करने के लिए कक्षाएं प्रदान करता है जो तब उपयोगी होते हैं जब आपको तारीखें चाहिए होती हैं। हमें सचमुच यूटीसी में एक पूर्णांक की आवश्यकता है ताकि टाइम मॉड्यूल अधिक उपयोगी हो।

इंसेटैड, हम यह कर सकते हैं

  now = int(time.time())

    return json.dumps(
        {
            "iss": service_account_email,
            "sub": service_account_email,
            "aud": resource_url,
            "iat": now,
            "exp": now   3600,
        }
    )

इस नमूने के लिए संपूर्ण (अद्यतन!) कोड यहां पाएं।

विज्ञप्ति वक्तव्य इस लेख को इस पर पुन: प्रस्तुत किया गया है: https://dev.to/sigje/building-a-valid-jwt-maims-set-4l58?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3