आपको Apigee Edge का दस्तावेज़ दिख रहा है.
Apigee X के दस्तावेज़ पर जाएं. जानकारी
Apigee Edge, एपीआई को सुरक्षित रखने के लिए OAuth 2.0 फ़्रेमवर्क उपलब्ध कराता है. OAuth2, टोकन पर आधारित पुष्टि करने और अनुमति देने की सबसे लोकप्रिय ओपन-स्टैंडर्ड स्कीम में से एक है. इसकी मदद से क्लाइंट ऐप्लिकेशन, उपयोगकर्ताओं की ओर से एपीआई ऐक्सेस कर सकते हैं. इसके लिए, उपयोगकर्ताओं को अपना उपयोगकर्ता नाम और पासवर्ड ज़ाहिर करने की ज़रूरत नहीं होती.
Apigee Edge, डेवलपर को ऐक्सेस और/या रीफ़्रेश टोकन जनरेट करने की अनुमति देता है. इसके लिए, OAuth2 के चार ग्रांट टाइप में से किसी एक को लागू करना होता है. ये ग्रांट टाइप हैं - क्लाइंट क्रेडेंशियल, पासवर्ड, इंप्लिसिट, और ऑथराइज़ेशन कोड. इनका इस्तेमाल OAuthv2 नीति के तहत किया जाता है. क्लाइंट ऐप्लिकेशन, सुरक्षित एपीआई का इस्तेमाल करने के लिए ऐक्सेस टोकन का इस्तेमाल करते हैं. हर ऐक्सेस टोकन की समयसीमा खत्म होने का समय अलग-अलग होता है. इसे OAuthv2 नीति में सेट किया जा सकता है.
कुछ तरह के ग्रांट के साथ, ऐक्सेस टोकन के साथ रीफ़्रेश टोकन भी जारी किए जाते हैं. हालांकि, ऐसा करना ज़रूरी नहीं है. रीफ़्रेश टोकन का इस्तेमाल, नए और मान्य ऐक्सेस टोकन पाने के लिए किया जाता है. ऐसा तब किया जाता है, जब मूल ऐक्सेस टोकन की समयसीमा खत्म हो गई हो या उसे रद्द कर दिया गया हो. रीफ़्रेश टोकन के खत्म होने का समय, OAuthv2 नीति में भी सेट किया जा सकता है.
यह एंटीपैटर्न, OAuth टोकन के लिए लंबे समयसीमा खत्म होने का समय सेट करने के एंटीपैटर्न से जुड़ा है.
ऐंटीपैटर्न
OAuthv2 नीति में रीफ़्रेश टोकन के लिए समयसीमा सेट न करने से, OAuth टोकन इकट्ठा हो जाते हैं. साथ ही, Cassandra नोड पर डिस्क स्पेस का इस्तेमाल बढ़ जाता है.
यहां दिए गए 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 मिनट के लिए सेट की जाती है.
- रीफ़्रेश टोकन की समयसीमा खत्म होने की तारीख सेट नहीं है.
- रीफ़्रेश टोकन, डेटा स्टोर (Cassandra) में हमेशा के लिए सेव रहता है. इससे डेटा इकट्ठा होता रहता है.
- जिस रीफ़्रेश टोकन की समयसीमा खत्म नहीं होती है उसका इस्तेमाल, ऐक्सेस टोकन जनरेट करने के लिए हमेशा किया जा सकता है.
- अगर इस एपीआई पर हर सेकंड 10 अनुरोध आते हैं, तो यह एक दिन में 8,64,000 टोकन जनरेट कर सकता है.
असर
- अगर रीफ़्रेश टोकन को बिना किसी समयसीमा के बनाया जाता है, तो इसके दो मुख्य नतीजे होते हैं:
- रीफ़्रेश टोकन का इस्तेमाल, आने वाले समय में कभी भी किया जा सकता है. ऐसा हो सकता है कि इसका इस्तेमाल सालों तक किया जा सके. इससे ऐक्सेस टोकन मिलता है. इससे सुरक्षा से जुड़ी समस्याएं हो सकती हैं.
- Cassandra में मौजूद रीफ़्रेश टोकन वाली लाइन कभी नहीं मिटाई जाएगी. इससे Cassandra में डेटा इकट्ठा होगा.
- अगर नया ऐक्सेस टोकन पाने के लिए, रीफ़्रेश टोकन का इस्तेमाल नहीं किया जाता है, बल्कि नया रीफ़्रेश टोकन और ऐक्सेस टोकन बनाया जाता है, तो पुराना रीफ़्रेश टोकन Cassandra में बना रहेगा. इस वजह से, रीफ़्रेश टोकन Cassandra में इकट्ठा होते रहेंगे. इससे Cassandra में डेटा की मात्रा बढ़ती रहेगी, डिस्क का इस्तेमाल बढ़ेगा, और कंपैक्शन की प्रोसेस धीमी हो जाएगी. साथ ही, Cassandra में डेटा को पढ़ने/लिखने में ज़्यादा समय लगेगा.
सबसे सही तरीका
रीफ़्रेश और ऐक्सेस टोकन, दोनों के लिए कम समय वाला समाप्ति समय इस्तेमाल करें. रीफ़्रेश और ऐक्सेस टोकन के खत्म होने का समय सेट करने के लिए, सबसे सही तरीका देखें. पक्का करें कि नीति में, ऐक्सेस और रीफ़्रेश टोकन, दोनों के लिए समयसीमा खत्म होने की तारीख कॉन्फ़िगर की गई हो. नीति के कॉन्फ़िगरेशन के बारे में ज़्यादा जानकारी के लिए, OauthV2 नीति का दस्तावेज़ देखें.
खास तौर पर, Private Cloud के ग्राहकों के लिए सबसे सही तरीके
इस सेक्शन में, Edge for Private Cloud के ग्राहकों के लिए सबसे सही तरीके बताए गए हैं.
रीफ़्रेश टोकन के खत्म होने की डिफ़ॉल्ट अवधि तय करना
डिफ़ॉल्ट रूप से, अगर किसी नीति के कॉन्फ़िगरेशन में रीफ़्रेश टोकन के खत्म होने की तारीख नहीं दी गई है, तो Edge बिना किसी समयसीमा के रीफ़्रेश टोकन बनाता है. इस व्यवहार को बदलने के लिए, यह तरीका अपनाएं:
- मैसेज प्रोसेसर नोड पर, कॉन्फ़िगरेशन ओवरराइड फ़ाइल में बदलाव करें या उसे बनाएं
$APIGEE_ROOT/customer/application/message-processor.properties. पक्का करें किapigeeउपयोगकर्ता इस फ़ाइल को पढ़ सकता हो. - फ़ाइल में यह लाइन जोड़ें:
इससे डिफ़ॉल्ट रीफ़्रेश टोकन की समयसीमा खत्म होने का समय एक घंटे पर सेट हो जाएगा. ऐसा तब होगा, जब किसी नीति में समयसीमा खत्म होने का समय नहीं बताया गया हो. कारोबार की ज़रूरतों के हिसाब से, इस डिफ़ॉल्ट वैल्यू को बदला जा सकता है.conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
- मैसेज प्रोसेसर सेवा को रीस्टार्ट करें:
apigee-service edge-message-processor restart
- ऊपर दिए गए चरणों को, मैसेज प्रोसेसर के सभी नोड में एक-एक करके दोहराएं.
Cassandra में सबसे सही तरीके
Apigee के सार्वजनिक तौर पर उपलब्ध नए वर्शन पर अपग्रेड करने की कोशिश करें. Apigee, गड़बड़ियों को ठीक करने और सुविधाओं को बेहतर बनाने के लिए लगातार अपडेट जारी करता रहता है. इससे Apigee में टोकन को मैनेज करने की सुविधा बेहतर होती है और उसे ऑप्टिमाइज़ किया जा सकता है. Apigee में, ऐक्सेस और रीफ़्रेश टोकन को Cassandra में “kms” कीस्पेस में सेव किया जाता है. आपको यह पक्का करना होगा कि इस कीस्पेस की कंपैक्शन रणनीति,LeveledCompactionStrategy पर सेट हो.
आपको यह देखना चाहिए कि ये इंडेक्स मौजूद नहीं हैं:
- kms.oauth_20_access_tokens.oauth_20_access_tokens_organization_name_idx#f0f0f0 and
- kms.oauth_20_access_tokens.oauth_20_access_tokens_status_idx
टेबल kms.oauth_20_access_tokens में gc_grace_seconds को भी कम किया जा सकता है. इसके लिए, डिफ़ॉल्ट रूप से 10 दिन की अवधि को कम करके कोई अन्य वैल्यू (जैसे, तीन दिन) सेट करें. इससे यह पक्का किया जा सकेगा कि टोकन मिटाने की वजह से जनरेट हुए टॉम्बस्टोन, डेटा स्टोर से तेज़ी से हटा दिए जाएं.