एंटीपैटर्न: OAuth टोकन के लिए, खत्म होने की कोई समयसीमा सेट न करें

Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं.
जानकारी

Apigee Edge, एपीआई को सुरक्षित बनाने के लिए OAuth 2.0 फ़्रेमवर्क उपलब्ध कराता है. OAuth2, टोकन पर आधारित पुष्टि करने और अनुमति देने की सबसे लोकप्रिय ओपन-स्टैंडर्ड स्कीम में से एक है. इससे क्लाइंट ऐप्लिकेशन, उपयोगकर्ताओं की तरफ़ से एपीआई ऐक्सेस कर सकते हैं. इसके लिए, उपयोगकर्ताओं को अपना उपयोगकर्ता नाम और पासवर्ड बताने की ज़रूरत नहीं होती.

Apigee Edge, डेवलपर को OAuthv2 नीति का इस्तेमाल करके, इन चार OAuth2 अनुदान टाइप में से किसी एक को लागू करके, ऐक्सेस और/या रीफ़्रेश टोकन जनरेट करने की सुविधा देता है. जैसे- क्लाइंट क्रेडेंशियल, पासवर्ड, इंप्लिसिट, और ऑथराइज़ेशन कोड. क्लाइंट ऐप्लिकेशन, सुरक्षित एपीआई का इस्तेमाल करने के लिए, ऐक्सेस टोकन का इस्तेमाल करते हैं. हर ऐक्सेस टोकन की समयसीमा खत्म होने की अपनी अलग समयसीमा होती है. इसे OAuthv2 नीति में सेट किया जा सकता है.

रीफ़्रेश टोकन, कुछ दिए गए अनुदान टाइप के साथ ऐक्सेस टोकन के साथ जारी किए जाते हैं. रीफ़्रेश टोकन का इस्तेमाल, नए और मान्य ऐक्सेस टोकन पाने के लिए किया जाता है. ऐसा मूल ऐक्सेस टोकन की समयसीमा खत्म होने या उसे रद्द करने के बाद किया जाता है. OAuthv2 नीति में, रीफ़्रेश टोकन के खत्म होने की तारीख भी सेट की जा सकती है.

यह एंटीपैटर्न, OAuth टोकन के लिए, लंबे समय तक समयसीमा सेट करने के एंटीपैटर्न से जुड़ा है.

एंटीपैटर्न

OAuthv2 नीति में, रीफ़्रेश टोकन के लिए समयसीमा खत्म होने की कोई समयसीमा सेट न करने से, OAuth टोकन इकट्ठा हो जाते हैं. साथ ही, कैसंड्रा नोड पर डिस्क स्पेस का इस्तेमाल बढ़ जाता है.

OAuthV2 नीति के इस उदाहरण में, <RefreshTokenExpiresIn> के लिए कॉन्फ़िगरेशन मौजूद नहीं है:

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <!--<RefreshTokenExpiresIn> is missing -->
    <SupportedGrantTypes>
      <GrantType>password</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

ऊपर दिए गए उदाहरण में:

  • ऐक्सेस टोकन सेट किया गया है. इसकी समयसीमा कम है और यह 30 मिनट की है.
  • रीफ़्रेश टोकन की समयसीमा सेट नहीं की गई है.
  • रीफ़्रेश टोकन, डेटा स्टोर (कैसांड्रा) में हमेशा के लिए बना रहता है और डेटा इकट्ठा होता रहता है.
  • किसी रीफ़्रेश टोकन को बिना किसी तय समयसीमा के, हमेशा के लिए इस्तेमाल करके ऐक्सेस टोकन जनरेट किए जा सकते हैं.
  • अगर इस एपीआई पर ट्रैफ़िक हर सेकंड में 10 अनुरोध आता है, तो यह एक दिन में 8,64,000 टोकन जनरेट कर सकता है.

असर

  • अगर रीफ़्रेश टोकन को बनाने की समयसीमा खत्म नहीं हुई है, तो इसके दो मुख्य नतीजे हो सकते हैं:
    • रीफ़्रेश टोकन को ऐक्सेस टोकन पाने के लिए, आने वाले समय में कभी भी इस्तेमाल किया जा सकता है. ऐसा कई सालों तक किया जा सकता है. इससे सुरक्षा पर असर हो सकता है.
    • Cassandra की रीफ़्रेश टोकन वाली पंक्ति कभी नहीं मिटाई जाएगी. इससे कैसंड्रा में डेटा इकट्ठा हो जाएगा.
  • अगर नया ऐक्सेस टोकन पाने के लिए, रीफ़्रेश टोकन का इस्तेमाल नहीं किया जाता है, लेकिन एक नया रीफ़्रेश टोकन और ऐक्सेस टोकन बनाया जाता है, तो पुराना रीफ़्रेश टोकन, Cassandra में बना रहेगा. नतीजतन, रीफ़्रेश टोकन कैसांड्रा में इकट्ठा होते रहेंगे. इससे ब्लोट और डिस्क का इस्तेमाल बढ़ जाएगा. साथ ही, डिस्क का इस्तेमाल और ज़्यादा कॉम्पैक्ट भी बढ़ जाएंगे. इसकी वजह से, कसांद्रा में पढ़ने/लिखने में देरी हो सकती है.

सबसे सही तरीका

रीफ़्रेश और ऐक्सेस टोकन, दोनों के लिए, समयसीमा खत्म होने की कम समय अवधि का इस्तेमाल करें. रीफ़्रेश और ऐक्सेस टोकन के खत्म होने का समय सेट करने का सबसे सही तरीका देखें. नीति में ऐक्सेस और रीफ़्रेश टोकन, दोनों के लिए, एक्सपायर होने की तारीख वाला कॉन्फ़िगरेशन ज़रूर तय करें. नीति को कॉन्फ़िगर करने के बारे में ज़्यादा जानने के लिए, OauthV2 से जुड़ी नीति का दस्तावेज़ देखें.

खास तौर पर, Private Cloud के ग्राहकों के लिए बने सबसे सही तरीके

इस सेक्शन में, खास तौर पर Private Cloud के ग्राहकों के लिए, Edge के सबसे सही तरीकों के बारे में बताया गया है.

रीफ़्रेश टोकन के खत्म होने की डिफ़ॉल्ट तारीख तय करें

डिफ़ॉल्ट रूप से, अगर नीति के कॉन्फ़िगरेशन में रीफ़्रेश टोकन की समयसीमा के बारे में नहीं बताया गया है, तोEdge बिना किसी समयसीमा के रीफ़्रेश टोकन बनाता है. इस तरीके को बदलने के लिए, इस तरीके का इस्तेमाल किया जा सकता है:

  1. मैसेज प्रोसेसर नोड पर, कॉन्फ़िगरेशन ओवरराइड करने वाली फ़ाइल $APIGEE_ROOT/customer/application/message-processor.properties में बदलाव करें या नया कॉन्फ़िगरेशन बनाएं. यह पक्का करें कि इस फ़ाइल को apigee उपयोगकर्ता पढ़ सके.
  2. फ़ाइल में यह लाइन जोड़ें:
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
    अगर नीति में किसी के बारे में नहीं बताया गया है, तो इससे डिफ़ॉल्ट रीफ़्रेश टोकन की समयसीमा एक घंटे पर सेट हो जाएगी. अपने कारोबार की ज़रूरतों के हिसाब से, इस डिफ़ॉल्ट वैल्यू को बदला जा सकता है.
  3. मैसेज प्रोसेस करने वाली सेवा को रीस्टार्ट करें:
    apigee-service edge-message-processor restart
  4. सभी मैसेज प्रोसेसर नोड में, ऊपर दिया गया तरीका एक-एक करके दोहराएं.

कसांद्रा में सबसे सही तरीके

Apigee के सार्वजनिक तौर पर उपलब्ध नए वर्शन पर अपग्रेड करने की कोशिश करें. Apigee की मदद से, वह सुधार और सुधार जारी रखता है. इससे Apigee में मौजूद टोकन के मैनेजमेंट को बेहतर और ऑप्टिमाइज़ किया जा सकता है. Apigee में, ऐक्सेस और रीफ़्रेश टोकन को कैसांड्रा में “कि॰मी॰” कीस्पेस में सेव किया जाता है. आपको यह पक्का करना होगा कि इस कीस्पेस की कॉम्पैक्ट रणनीति, LeveledCompactionStrategy पर सेट हो. आपको यह जांच करनी चाहिए कि ये इंडेक्स मौजूद नहीं हैं:
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_organization_name_idx#f0f0f0 और
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_status_idx

आपके पास टेबल में gc_grace_seconds को कम करने के लिए, kms.oauth_20_access_tokens को डिफ़ॉल्ट 10 दिनों की वैल्यू से कम वैल्यू (जैसे, तीन दिन) पर सेट करने का भी विकल्प होता है. इससे यह पक्का किया जा सकता है कि टोकन मिटाए जाने की वजह से जनरेट हुए मकबरे, डेटा स्टोर से जल्दी से जल्दी से साफ़ हो जाएं.

इसके बारे में और पढ़ें