API Gateway प्रमाणीकरण
Yong Qian
November 25, 2022
API गेटवे के लिए प्रमाणीकरण और प्राधिकरण का महत्व
API गेटवे का मुख्य कार्य API उपभोक्ताओं और API प्रदाताओं को जोड़ना है।
व्यवहार में, कुछ API को छोड़कर जो अनाम पहुंच की अनुमति देते हैं, प्रदाता अक्सर उपभोक्ताओं को प्रतिबंधित करते हैं: केवल योग्य उपभोक्ता ही API तक पहुंच सकते हैं। इसके अलावा, प्रदाता अलग-अलग उपभोक्ताओं के लिए एक ही पहुंच नीति नहीं रख सकते हैं, उदाहरण के लिए, उपभोक्ता A और B दोनों /send_mail API तक पहुंच सकते हैं, लेकिन प्रति मिनट कॉल की आवृत्ति को अलग-अलग तरीके से गणना करने की आवश्यकता होती है।
उपरोक्त दो बिंदुओं से, हम देख सकते हैं कि API गेटवे स्तर पर API उपभोक्ताओं की पहचान और सत्यापन करना अत्यंत महत्वपूर्ण है। निम्नलिखित में, हम यह बताएंगे कि ओपन-सोर्स API गेटवे Apache APISIX उपभोक्ताओं के लिए प्रमाणीकरण कैसे लागू करता है और उन प्रमाणीकरण विधियों को जो उद्यमों द्वारा व्यापक रूप से अपनाई जाती हैं, और फिर यह भी बताएंगे कि APISIX के उपयोगकर्ता प्रमाणीकरण प्रणाली का उपयोग अन्य सुरक्षा सुविधाओं के साथ कैसे किया जा सकता है ताकि API गेटवे की सुरक्षा सुरक्षा को और बढ़ाया जा सके।

Apache APISIX का प्रमाणीकरण और प्राधिकरण
पारंपरिक HTTP प्रॉक्सी केवल अनुरोध डोमेन नाम और क्लाइंट IP जैसे मोटे साधनों के आधार पर अनुरोधकर्ता की पहचान कर सकते हैं, जो एक API गेटवे के लिए पर्याप्त नहीं है। हमें अधिक जटिल व्यावसायिक आवश्यकताओं को पूरा करने के लिए अधिक परिष्कृत प्रमाणीकरण विधियों की आवश्यकता है। पारंपरिक प्रॉक्सी की तुलना में APISIX का एक प्रमुख लाभ इसकी लचीली प्लगइन एक्सटेंशन क्षमता है, जिसमें उपयोगकर्ता प्रमाणीकरण के लिए प्लगइन का संग्रह शामिल है जो कार्यान्वयन विधि के आधार पर दो श्रेणियों में विभाजित किया जा सकता है:
- बाहरी प्रमाणीकरण सेवाओं के साथ इंटरफेस

- APISIX द्वारा डिज़ाइन किए गए कंज्यूमर ऑब्जेक्ट द्वारा आंतरिक गेटवे प्रमाणीकरण

इन दो प्रमाणीकरण विधियों को क्रम से पेश किया जाएगा।
बाहरी प्रमाणीकरण सेवाओं के साथ इंटरफेस
जब एक उद्यम API गेटवे को अपनाता है, तो अक्सर सिस्टम में एक अलग प्रमाणीकरण सेवा तैनात होती है। तो हम APISIX को मौजूदा प्रमाणीकरण सेवा के साथ कैसे इंटरफेस कर सकते हैं? APISIX विभिन्न बाहरी प्रमाणीकरण सेवाओं के साथ इंटरफेस करने और उन्हें प्रमाणीकरण पूरा करने के लिए सौंपने वाले प्लगइन का एक सेट प्रदान करता है।
उदाहरण के लिए, हम OIDC प्रोटोकॉल का समर्थन करने वाली किसी भी प्रमाणीकरण सेवा के साथ इंटरफेस करने के लिए openid-connect प्लगइन का उपयोग कर सकते हैं। निम्नलिखित keycloak सेवा के साथ इंटरफेस करने के लिए एक नमूना कॉन्फ़िगरेशन है:
curl http://127.0.0.1:9180/apisix/admin/routes -H "X-Api-Key: your-API-key" -XPOST -d ' { "uri":"/*", "plugins":{ "openid-connect":{ "client_id":"apisix", // keycloak द्वारा क्लाइंट बनाते समय जनरेट किया गया "client_secret":"d5c42c50-3e71-4bbe-aa9e-31083ab29da4", "discovery":"http://keycloak:8080/auth/realms/apisix_test_realm/.well-known/openid-configuration", // keycloak OpenID एंडपॉइंट "scope":"openid profile", "bearer_only":false, "realm":"apisix_test_realm", "introspection_endpoint_auth_method":"client_secret_post", "redirect_uri":"http://127.0.0.1:9080/" } }, "upstream":{ ... } }'
आंतरिक गेटवे प्रमाणीकरण
कंज्यूमर

जब विभिन्न स्रोतों से अनुरोध API गेटवे पर पहुंचते हैं, तो गेटवे को इन कॉलरों की पहचान करनी चाहिए। Apache APISIX एक निश्चित प्रकार की सेवा के कॉलरों का प्रतिनिधित्व करने के लिए "कंज्यूमर" की अवधारणा प्रस्तावित करता है।
कंज्यूमर ऑब्जेक्ट को उपयोग करने के लिए एक प्रमाणीकरण प्लगइन कॉन्फ़िगर करने की आवश्यकता होती है। सबसे सरल key-auth प्लगइन को उदाहरण के रूप में लें:
$ curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: your-API-key' -X PUT -i -d ' { "username": "jack", "plugins": { "key-auth": { "key": "auth-jack" } }'
उपरोक्त कॉन्फ़िगरेशन का अर्थ है कि जब अनुरोध निर्दिष्ट कुंजी (auth-jack) लेकर आता है, तो वर्तमान अनुरोध कंज्यूमर - जैक से जुड़ा होगा। जैसा कि आप देख सकते हैं, कंज्यूमर पर कॉन्फ़िगर किया गया प्रमाणीकरण प्लगइन वास्तव में एक निर्दिष्ट प्रमाणीकरण तंत्र के तहत एक पहचान प्रमाण है। key-auth प्लगइन में, कुंजी एक कंज्यूमर की पहचान करने वाला प्रमाण है, जो basic-auth प्लगइन के उपयोगकर्ता नाम और पासवर्ड के समान है।
रूट के लिए प्रमाणीकरण प्लगइन कॉन्फ़िगर करें
एक बार जब हम कंज्यूमर के माध्यम से प्रमाणिकरण जानकारी को एक विशिष्ट कंज्यूमर से जोड़ देते हैं, तो हमें संबंधित रूट पर प्रमाणीकरण प्लगइन को सक्षम करने की भी आवश्यकता होती है:
$ curl http://127.0.0.1:9180/apisix/admin/routes/orders -H 'X-API-KEY: your-API-key' -X PUT -i -d ' { "uri": "/orders", "plugins": { "key-auth": { "header": "Authorization" } } }'
उपरोक्त कॉन्फ़िगरेशन का अर्थ है कि रूट /orders पर key-auth प्लगइन सक्षम है, और प्रमाणीकरण प्रभाव निम्नलिखित है:
$ curl http://127.0.0.1:9080/orders -H 'Authorization: auth-jack' -i HTTP/1.1 200 OK ... $ curl http://127.0.0.1:9080/orders -H 'Authorization: wrong-key' -i HTTP/1.1 401 Unauthorized ... {"message":"Invalid API key in request"}
जब किसी उपयोगकर्ता का अनुरोध इस रूट पर पहुंचता है, तो APISIX Authorization हेडर के माध्यम से उपयोगकर्ता द्वारा प्रदान की गई कुंजी प्राप्त करने का प्रयास करेगा। यदि इसे प्राप्त नहीं किया जाता है, या प्राप्त कुंजी वैध नहीं है, तो अनुरोध को सीधे गेटवे द्वारा अस्वीकार कर दिया जाएगा, जिससे अपस्ट्रीम सेवा की सुरक्षा होगी।
यह देखा जा सकता है कि उपरोक्त दो प्रमाणीकरण विधियों में, प्रमाणीकरण प्लगइन पूरे सिस्टम का केंद्र है, जिसकी समृद्धि सीधे उपयोगकर्ताओं के API गेटवे चयन को प्रभावित करती है। निम्नलिखित कुछ मुख्यधारा प्रमाणीकरण विधियां और उनके संबंधित लाभ और हानियां हैं जिन्हें आपके संदर्भ के लिए प्रस्तुत किया गया है।
मुख्यधारा प्रमाणीकरण विधियां
प्रमाणीकरण और प्राधिकरण, एक मूलभूत तंत्र जो हमारे कंप्यूटर दुनिया में प्रवेश करने के बाद से मौजूद है, इतने सालों के विकास के बाद एक बहुत ही विविध क्षेत्र में विकसित हो गया है। APISIX का प्लगइन तंत्र विभिन्न प्रमाणीकरण विधियों को लागू करने की विकास लागत को बहुत कम कर देता है। निम्नलिखित कुछ मुख्यधारा प्रमाणीकरण विधियां हैं जो APISIX द्वारा पहले से ही समर्थित हैं:
Key Auth
Key Auth सभी प्रमाणीकरण प्लगइन में सबसे सरल है, लेकिन वास्तविक दुनिया के परिदृश्यों में इसका व्यापक उपयोग है, जैसे कि भुगतान सॉफ्टवेयर के लाइसेंस, ओपन API प्लेटफॉर्म में डेवलपर्स की पहचान करने वाले टोकन आदि, जिन्हें Key Auth के साथ आसानी से लागू किया जा सकता है। इसके अलावा, APISIX की पूरी तरह से डायनामिक कॉन्फ़िगरेशन और आवंटन क्षमता के आधार पर, कुंजी को जल्दी से बनाया और रद्द किया जा सकता है, जो वास्तविक समय में प्रभावी होता है।
Basic Auth
Basic Auth उपयोगकर्ता नाम और पासवर्ड पर आधारित एक प्रमाणीकरण विधि है, जो अक्सर वेब लॉगिन परिदृश्यों में उपयोग की जाती है। उदाहरण के लिए, एक वेबसाइट का एडमिन बैकएंड एडमिन के लॉग इन करने के बाद उपयोग किया जा सकता है, जहां हम Basic Auth का उपयोग कर सकते हैं।
LDAP
LDAP (लाइटवेट डायरेक्टरी एक्सेस प्रोटोकॉल) X.500 मानक पर आधारित एक लाइटवेट फाइल एक्सेस प्रोटोकॉल है, जो IP प्रोटोकॉल के माध्यम से वितरित सूचना निर्देशिकाओं तक पहुंच नियंत्रण और रखरखाव प्रदान करता है। LDAP के साथ, एप्लिकेशन और ऑप्स डेवलपर्स संसाधनों तक उपयोगकर्ता पहुंच को सूक्ष्म स्तर पर नियंत्रित कर सकते हैं। APISIX के ldap-auth प्लगइन के साथ, आप LDAP प्रोटोकॉल को लागू करने वाले प्लेटफॉर्म, जैसे Microsoft का Active Directory, या Linux प्लेटफॉर्म के लिए OpenLDAP Server, के साथ आसानी से इंटरफेस कर सकते हैं, ताकि कंज्यूमर की विशिष्ट रूट तक पहुंच को सूक्ष्म स्तर पर नियंत्रित किया जा सके।
OIDC
OpenID एक विकेंद्रीकृत ऑनलाइन प्रमाणीकरण प्रणाली है। OpenID का समर्थन करने वाली साइटों के लिए, उपयोगकर्ताओं को पारंपरिक प्रमाणीकरण टोकन जैसे उपयोगकर्ता नाम और पासवर्ड याद रखने की आवश्यकता नहीं है। इसके बजाय, उन्हें केवल एक वेबसाइट पर पहले से पंजीकृत होना चाहिए जो OpenID पहचान प्रदाता (IdP) के रूप में कार्य करती है, और फिर इस खाते का उपयोग करके उस प्रदाता के साथ इंटरफेस करने वाले सभी एप्लिकेशन में लॉग इन किया जा सकता है, उदाहरण के लिए, Google या Facebook सेवाओं के खातों के माध्यम से हमारे अपने सिस्टम के उपयोगकर्ताओं को प्रमाणित करने के लिए।
OIDC के लिए, APISIX openid-connect प्लगइन प्रदान करता है, जिसका उपयोग OIDC प्रोटोकॉल का समर्थन करने वाली प्रमाणीकरण सेवाओं के साथ इंटरफेस करने के लिए किया जा सकता है।
Forward Auth
जब APISIX का मानक प्रमाणीकरण प्लगइन आपकी वर्तमान आवश्यकताओं को पूरा नहीं करता है, या यदि आपके सिस्टम में एक समर्पित और गैर-मानक प्रोटोकॉल प्रमाणीकरण सेवा तैनात की गई है, तो आप forward-auth प्लगइन का उपयोग करने पर विचार कर सकते हैं। इस प्लगइन का उपयोग करके, आप उपयोगकर्ता अनुरोधों को HTTP के माध्यम से प्रमाणीकरण सेवा पर फॉरवर्ड कर सकते हैं और यदि प्रमाणीकरण सेवा गैर-सामान्य स्थिति (20x के अलावा त्रुटि कोड) के साथ प्रतिक्रिया देती है, तो कस्टम त्रुटियां वापस कर सकते हैं या उपयोगकर्ताओं को प्रमाणीकरण पृष्ठ पर रीडायरेक्ट कर सकते हैं।
forward-auth प्लगइन की शक्ति के साथ, प्रमाणीकरण और प्राधिकरण तर्क को एक समर्पित, गैर-मानक प्रोटोकॉल बाहरी सेवा पर बहुत चतुराई से स्थानांतरित किया जा सकता है।
प्रमाणीकरण के बाद अन्य प्लगइन के साथ लिंकेज
उपयोगकर्ता प्रमाणीकरण APISIX के साथ API को सुरक्षित करने का केवल पहला कदम है। प्रमाणीकरण क्षमताओं को अन्य सुरक्षा प्लगइन के साथ जोड़ने से गेटवे की सुरक्षा क्षमताओं को और बढ़ाया जा सकता है।
ACL (consumer-restriction)
एक जटिल बैकएंड सिस्टम में, कुछ API हो सकते हैं जिनकी सुरक्षा प्रतिबंध अन्य की तुलना में अधिक होती है, जिन्हें केवल अनाम उपयोगकर्ताओं को ब्लॉक करने की आवश्यकता नहीं होती है, बल्कि प्रमाणित उपयोगकर्ताओं को भी प्रतिबंधित करने की आवश्यकता होती है, उदाहरण के लिए, केवल व्हाइटलिस्टेड उपयोगकर्ताओं को उपयोगकर्ता प्रबंधन API तक पहुंच की अनुमति देना।

इस मामले में, हम APISIX द्वारा प्रदान किए गए consumer-restriction प्लगइन का उपयोग करके पहुंच नियंत्रण तंत्र को लागू कर सकते हैं।
$ curl http://127.0.0.1:9180/apisix/admin/routes -H 'X-API-KEY: your-API-key' -X POST -i -d ' { "uri": "/api/v1/users/admin", "plugins": { "key-auth": {}, "consumer-restriction": { "whitelist": [ "Rose", "Peter ] } }, "upstream": { ... }, }'
उपरोक्त रूट /api/v1/users/admin रूट को key-auth और consumer-restriction प्लगइन के माध्यम से key auth प्रमाणीकरण की आवश्यकता होती है, और केवल Rose और Peter इसे एक्सेस कर सकते हैं।
Rate Limiting (limit-count)
हमने पहले बताया कि आप कंज्यूमर में प्रमाणीकरण प्लगइन कॉन्फ़िगर करके उपयोगकर्ता प्रमाणिकरण को कंज्यूमर से जोड़ सकते हैं, लेकिन वास्तव में APISIX कंज्यूमर ऑब्जेक्ट केवल प्रमाणीकरण प्लगइन ही नहीं, बल्कि रूट और सेवा जैसे किसी भी प्लगइन को माउंट कर सकता है।
उदाहरण के लिए, वास्तविक अनुप्रयोग में, रेट-लिमिटिंग नीति अक्सर स्थिर नहीं होती है, बल्कि व्यक्तिगत होती है। यह आमतौर पर मांग की जाती है कि विभिन्न सेवा-स्तरीय कॉलरों के लिए अलग-अलग API रेट-लिमिटिंग नीतियां हों। हालांकि, ऐसी मांग को रूट पर रेट-लिमिटिंग प्लगइन माउंट करके हल नहीं किया जा सकता है। इसलिए, हमें कंज्यूमर पर रेट-लिमिटिंग प्लगइन माउंट करने और प्रत्येक कंज्यूमर के लिए एक लक्षित रेट-लिमिटिंग नीति निर्दिष्ट करने की आवश्यकता होती है।
$ curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: your-API-key' -X PUT -i -d ' { "username": "jack", "plugins": { "key-auth": { "key": "jack" }, "limit-count": { "count": 200, "time_window": 60, "rejected_code": 503, "key": "$consumer_name", } }' $ curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: your-API-key' -X PUT -i -d ' { "username": "rose", "plugins": { "key-auth": { "key": "rose" }, "limit-count": { "count": 1000, "time_window": 60, "rejected_code": 503, "key": "$consumer_name", } }'
उपरोक्त कॉन्फ़िगरेशन के साथ, हमने jack और rose के लिए अलग-अलग रेट-लिमिटिंग नीतियां निर्दिष्ट की हैं, जहां rose के पास 60 सेकंड में 1000 अनुरोधों की उच्च कोटा है, जबकि jack के पास केवल 200 है।
सारांश
API गेटवे की एक अनिवार्य क्षमता के रूप में, प्रमाणीकरण और प्राधिकरण उपयोगकर्ताओं द्वारा API गेटवे चयन करते समय विचार करने वाले महत्वपूर्ण कारकों में से एक है।
इस पेपर में पेश किया गया ओपन-सोर्स गेटवे Apache APISIX, सभी प्रमुख प्रमाणीकरण विधियों को कवर करता है और उद्यम उपयोगकर्ताओं की प्रमाणीकरण और प्राधिकरण आवश्यकताओं को पूरा कर सकता है। APISIX के निम्नलिखित लाभ भी हैं:
- समृद्ध आउट-ऑफ-द-बॉक्स प्रमाणीकरण प्लगइन
- अंतर्निहित और बाहरी प्रमाणीकरण विधियों का समर्थन, जिन्हें उपयोगकर्ता स्वतंत्र रूप से चुन सकते हैं
- द्वितीयक विकास का समर्थन, कस्टम प्रमाणीकरण केंद्रों के साथ इंटरफेस करना आसान
ये लाभ उद्यमों को गेटवे-स्तरीय प्रमाणीकरण और प्राधिकरण को आसानी से लागू करने और API सुरक्षा को मजबूत करने में मदद कर सकते हैं।
Apache APISIX के बारे में अधिक जानने के लिए आपका स्वागत है। आप हमसे https://api7.ai/contact पर संपर्क कर सकते हैं।