फॉरवर्ड-ऑथ, प्रमाणीकरण कार्य के लिए एक और विकल्प

API7.ai

January 26, 2022

Ecosystem

फॉरवर्ड ऑथ चतुराई से प्रमाणीकरण और प्राधिकरण तर्क को एक समर्पित बाहरी सेवा में स्थानांतरित करता है, जहां गेटवे उपयोगकर्ता के अनुरोध को प्रमाणीकरण सेवा पर अग्रेषित करता है और मूल अनुरोध को ब्लॉक करता है और परिणाम को प्रतिस्थापित करता है जब प्रमाणीकरण सेवा गैर-20x स्थिति के साथ प्रतिक्रिया करती है। इस तरह, यदि प्रमाणीकरण विफल होता है तो एक कस्टम त्रुटि वापस करना या उपयोगकर्ता को प्रमाणीकरण पृष्ठ पर पुनर्निर्देशित करना संभव है।

सिद्धांत

प्लगइन सिद्धांत

Apache APISIX में forward-auth plugin का सिद्धांत और प्रवाह ऊपर दिए गए चित्र में दिखाया गया है और निम्नलिखित चरणों में संक्षेपित किया गया है।

  • चरण 1: क्लाइंट द्वारा APISIX को एक अनुरोध किया जाता है
  • चरण 2: APISIX उपयोगकर्ता-कॉन्फ़िगर की गई प्रमाणीकरण सेवा को एक अनुरोध करता है
  • चरण 3: प्रमाणीकरण सेवा प्रतिक्रिया करती है (2xx या अपवाद स्थिति)
  • चरण 4: प्रमाणीकरण सेवा प्रतिक्रिया के आधार पर, APISIX अनुरोध को अपस्ट्रीम अग्रेषित करने या क्लाइंट को सीधे अस्वीकृति प्रतिक्रिया भेजने का निर्णय लेगा

उपयोग कैसे करें

चरण 1: प्रमाणीकरण सेवा सेट करें

मान लीजिए कि एक प्रमाणीकरण सेवा है जिसे उपयोगकर्ता एक Authorization अनुरोध हेडर के साथ अनुरोध भेजता है। यदि यह डेटा प्रमाणीकरण पास करता है, तो 200 स्थिति कोड और X-User-ID नामक एक प्रतिक्रिया हेडर वापस किया जाता है; यदि यह प्रमाणीकरण पास नहीं करता है, तो प्रमाणीकरण स्थिति को समाप्त माना जाता है और क्लाइंट को लॉगिन पृष्ठ पर पुनर्निर्देशित करने के लिए 302 स्थिति कोड और Location प्रतिक्रिया हेडर वापस किया जाता है।

चरण 2: एक रूट बनाएं और forward-auth प्लगइन सक्षम करें

अगले चरण में, हम एक रूट कॉन्फ़िगर करेंगे और forward-auth प्लगइन को सक्षम करेंगे ताकि उपरोक्त प्रमाणीकरण सेवा को अपस्ट्रीम एप्लिकेशन के साथ इंटरफेस किया जा सके।

curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "plugins": { "forward-auth": { "address": "http://127.0.0.1:9080/auth", "request_headers": ["Authorization"], "upstream_headers": ["X-User-ID"], "client_headers": ["Location"] } }, "uri": "/user" }'

उपरोक्त कॉन्फ़िगरेशन विवरण समझाया गया है।

  • जब एक अनुरोध वर्तमान रूट से मेल खाता है, तो address में परिभाषित request_headers (यानी, क्लाइंट द्वारा प्रमाणीकरण सेवा पर अग्रेषित किए जाने वाले अनुरोध हेडर, यदि सेट नहीं किया गया है, तो कोई अनुरोध हेडर अग्रेषित नहीं किया जाता है) के साथ address पर एक अनुरोध भेजा जाता है, जिससे प्रमाणीकरण सेवा उपयोगकर्ता की पहचान की पुष्टि कर सकती है।
  • यदि प्रमाणीकरण पास होता है, तो स्थिति कोड 200 होता है और upstream_headers में परिभाषित X-User-ID वापस किया जाता है (यानी, प्रमाणीकरण पास होने पर प्रमाणीकरण सेवा द्वारा अपस्ट्रीम अग्रेषित किए जाने वाले अनुरोध हेडर, यदि सेट नहीं किया गया है, तो कोई अनुरोध हेडर अग्रेषित नहीं किया जाता है)।
  • यदि प्रमाणीकरण विफल होता है, तो स्थिति कोड 302 होता है और client_headers में परिभाषित Location वापस किया जाता है (यानी, प्रमाणीकरण विफल होने पर प्रमाणीकरण सेवा द्वारा क्लाइंट को भेजा जाने वाला प्रतिक्रिया हेडर, या यदि सेट नहीं किया गया है तो कोई प्रतिक्रिया हेडर नहीं)।

चरण 3: अनुरोधों का परीक्षण करें

# POST का उपयोग करके अनुरोध और डेटा भेजें curl http://127.0.0.1:9080/user \ --header 'Authorization: true' HTTP/1.1 200 OK Content-Type: application/json Content-Length: 28 Server: APISIX/2.11.0 {"user_id":"i-am-real-user"} # GET का उपयोग करके अनुरोध करें curl -i http://127.0.0.1:9080/user \ --header 'Authorization: false' HTTP/1.1 302 FOUND Server: APISIX/2.11.0 Location: https://example.com/auth

परिशिष्ट: प्लगइन अक्षम करें

यदि आपने फॉरवर्ड ऑथ प्लगइन का उपयोग समाप्त कर दिया है, तो बस रूट कॉन्फ़िगरेशन से forward-auth प्लगइन कॉन्फ़िगरेशन को हटा दें और इसे सहेजें ताकि रूट पर फॉरवर्ड ऑथ प्लगइन बंद हो जाए।

Apache APISIX की गतिशील प्रकृति के कारण, प्लगइन को चालू और बंद करने के लिए Apache APISIX को पुनरारंभ करने की आवश्यकता नहीं है।

सारांश

forward-auth प्लगइन विवरण और पूर्ण कॉन्फ़िगरेशन सूची के बारे में अधिक जानकारी प्राप्त करने के लिए, आप आधिकारिक दस्तावेज़ का संदर्भ ले सकते हैं। साथ ही, यदि आपके पास अधिक जटिल प्रमाणीकरण या प्राधिकरण एप्लिकेशन परिदृश्य हैं, तो opa प्लगइन का उपयोग करने का प्रयास करें, जो प्रोग्रामेबल तरीके से अधिक शक्तिशाली कार्यक्षमता की अनुमति देता है।

Apache APISIX वर्तमान में अतिरिक्त सेवाओं के एकीकरण का समर्थन करने के लिए अतिरिक्त प्लगइन्स पर भी काम कर रहा है, इसलिए यदि आप रुचि रखते हैं, तो GitHub Discussion में चर्चा शुरू करने में संकोच न करें, या मेलिंग सूची के माध्यम से संवाद करें।

Tags: