Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं. जानकारी
यह क्या है
इससे आपको लास्ट मील सुरक्षा के लिए, कम बुनियादी पुष्टि करने
का इस्तेमाल करने की सुविधा मिलती है. इस नीति के लिए उपयोगकर्ता नाम और पासवर्ड इस्तेमाल किए जाते हैं, Base64 उन्हें कोड में बदलता है, और नतीजे के तौर पर मिली वैल्यू को एक वैरिएबल में लिख देता है. नतीजे के तौर पर मिलने वाली वैल्यू Basic
Base64EncodedString
फ़ॉर्मैट में है. आम तौर पर, इस वैल्यू को एचटीटीपी हेडर पर लिखा जाता है, जैसे कि ऑथराइज़ेशन हेडर.
इस नीति की मदद से, Base64 कोड में बदली गई स्ट्रिंग में सेव किए गए क्रेडेंशियल को उपयोगकर्ता नाम और पासवर्ड में डिकोड करने की सुविधा भी मिलती है.
वीडियो: इस वीडियो में बताया गया है कि पुष्टि करने की सामान्य नीति का इस्तेमाल करके, उपयोगकर्ता नाम और पासवर्ड को base64 कोड में कैसे बदला जाए.
वीडियो: इस वीडियो में बताया गया है कि पुष्टि करने की सामान्य नीति का इस्तेमाल करके, base64 कोड में बदले गए उपयोगकर्ता नाम और पासवर्ड को कैसे डिकोड किया जाए.
सैंपल
आउटबाउंड एन्कोडिंग
<BasicAuthentication name="ApplyBasicAuthHeader"> <DisplayName>ApplyBasicAuthHeader</DisplayName> <Operation>Encode</Operation> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <User ref="BasicAuth.credentials.username" /> <Password ref="BasicAuth.credentials.password" /> <AssignTo createNew="false">request.header.Authorization</AssignTo> </BasicAuthentication>
ऊपर दिए गए सैंपल नीति कॉन्फ़िगरेशन में, कोड में बदले जाने वाले उपयोगकर्ता नाम और पासवर्ड को
<User>
और <Password>
एलिमेंट के लिए ref
एट्रिब्यूट के ज़रिए बताए गए वैरिएबल से लिया जाता है. इस नीति के लागू होने से पहले,
वैरिएबल सेट करना ज़रूरी है. आम तौर पर, वैरिएबल में उन वैल्यू का इस्तेमाल किया जाता है जिन्हें
की/वैल्यू मैप से पढ़ा जाता है. की वैल्यू मैप ऑपरेशन की नीति देखें.
इस कॉन्फ़िगरेशन के नतीजे के तौर पर, <assignTo> एलिमेंट के ज़रिए बताए गए ऑथराइज़ेशन नाम के एचटीटीपी हेडर को बैकएंड सर्वर पर भेजे गए आउटबाउंड अनुरोध के मैसेज में जोड़ा जाता है:
Authorization: Basic TXlVc2VybmFtZTpNeVBhc3N3b3Jk
Base64 कोड में बदलने से पहले, <User>
और <Password>
वैल्यू को कोलन के साथ जोड़ा जाता है.
मान लें कि आपके पास इस एंट्री के साथ एक कुंजी/वैल्यू मैप है:
{ "encrypted" : true, "entry" : [ { "name" : "username", "value" : "MyUsername" }, { "name" : "password", "value" : "MyPassword" } ], "name" : "BasicAuthCredentials" }
बुनियादी पुष्टि करने की नीति से पहले, नीचे दी गई KeyValueMapOperations की नीतियों को अटैच करें,
ताकि कुंजी/वैल्यू स्टोर से आपके <User>
और
<Password>
एलिमेंट की वैल्यू एक्सट्रैक्ट की जा सकें. साथ ही, उन्हें
credentials.username
और credentials.password
वैरिएबल में भरा जा सके.
<KeyValueMapOperations name="getCredentials" mapIdentifier="BasicAuthCredentials"> <Scope>apiproxy</Scope> <Get assignTo="credentials.username" index='1'> <Key> <Parameter>username</Parameter> </Key> </Get> <Get assignTo="credentials.password" index='1'> <Key> <Parameter>password</Parameter> </Key> </Get> </KeyValueMapOperations>
इनबाउंड डिकोडिंग
<BasicAuthentication name="DecodeBaseAuthHeaders"> <DisplayName>Decode Basic Authentication Header</DisplayName> <Operation>Decode</Operation> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <User ref="request.header.username" /> <Password ref="request.header.password" /> <Source>request.header.Authorization</Source> </BasicAuthentication>
नीति के इस सैंपल में, नीति Authorization
एचटीटीपी हेडर से उपयोगकर्ता नाम और पासवर्ड को डिकोड करती है, जैसा कि <Source> एलिमेंट में बताया गया है. Base64 से कोड में बदली गई स्ट्रिंग, Basic Base64EncodedString.
फ़ॉर्मैट में होनी चाहिए
यह नीति, डिकोड किए गए उपयोगकर्ता नाम को request.header.username वैरिएबल में और डिकोड किए गए पासवर्ड को, request.header.password वैरिएबल में लिखती है.
पुष्टि करने की बुनियादी नीति के बारे में जानकारी
इस नीति में कार्रवाई करने के दो तरीके हैं:
- एन्कोड: Base64, वैरिएबल में सेव किए गए उपयोगकर्ता नाम और पासवर्ड को कोड में बदलता है
- डीकोड करना: Base64 कोड में बदली गई स्ट्रिंग से, उपयोगकर्ता नाम और पासवर्ड को डिकोड करता है
आम तौर पर, उपयोगकर्ता नाम और पासवर्ड को कुंजी/वैल्यू स्टोर में सेव किया जाता है और फिर इन्हें रनटाइम के दौरान, कुंजी/वैल्यू स्टोर से पढ़ा जाता है. कुंजी/वैल्यू स्टोर का इस्तेमाल करने के बारे में जानकारी के लिए, की वैल्यू मैप ऑपरेशन की नीति देखें.
एलिमेंट का रेफ़रंस
एलिमेंट रेफ़रंस, BasicAuthentication नीति के एलिमेंट और एट्रिब्यूट के बारे में जानकारी देता है.
<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1"> <DisplayName>Basic Authentication 1</DisplayName> <Operation>Encode</Operation> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <User ref="request.queryparam.username" /> <Password ref="request.queryparam.password" /> <AssignTo createNew="false">request.header.Authorization</AssignTo> <Source>request.header.Authorization</Source> </BasicAuthentication>
<BaseAuthentication> एट्रिब्यूट
<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1">
इस टेबल में उन एट्रिब्यूट के बारे में बताया गया है जो नीति के सभी पैरंट एलिमेंट के लिए एक जैसे होते हैं:
एट्रिब्यूट | ब्यौरा | डिफ़ॉल्ट | मौजूदगी |
---|---|---|---|
name |
नीति का अंदरूनी नाम. इसके अलावा, मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर में नीति को आम भाषा में अलग नाम से लेबल करने के लिए, |
लागू नहीं | ज़रूरी है |
continueOnError |
इस नीति को किसी नीति के काम न करने पर भी फ़्लो एक्ज़ीक्यूट करने की प्रोसेस को जारी रखने के लिए, |
false | ज़रूरी नहीं |
enabled |
नीति लागू करने के लिए, नीति को बंद करने के लिए, |
सही | ज़रूरी नहीं |
async |
यह एट्रिब्यूट अब काम नहीं करता. |
false | बहिष्कृत |
<DisplayName> एलिमेंट
मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर में, आम भाषा के अलग नाम से नीति को लेबल करने के लिए, name
एट्रिब्यूट का इस्तेमाल करें.
<DisplayName>Policy Display Name</DisplayName>
डिफ़ॉल्ट |
लागू नहीं अगर इस एलिमेंट को छोड़ दिया जाता है, तो नीति के |
---|---|
मौजूदगी | ज़रूरी नहीं |
Type | String |
<ऑपरेशन> एलिमेंट
इससे यह पता चलता है कि Base64 नीति, क्रेडेंशियल को कोड में बदलती है या डिकोड करती है.
<Operation>Encode</Operation>
डिफ़ॉल्ट: | लागू नहीं |
मौजूदगी: | ज़रूरी है |
टाइप: |
स्ट्रिंग. मान्य वैल्यू में ये शामिल हैं:
|
<ignoreUnresolvedVariables> एलिमेंट
अगर किसी वैरिएबल को ठीक नहीं किया जा सकता, तो नीति को true
पर सेट करने पर गड़बड़ी का मैसेज नहीं दिखेगा. सामान्य पुष्टि करने की नीति के लिए इस्तेमाल किए जाने पर, यह सेटिंग आम तौर पर false
पर सेट होती है. आम तौर पर, अगर तय किए गए वैरिएबल में उपयोगकर्ता नाम या पासवर्ड नहीं मिलता है, तो आम तौर पर गड़बड़ी का मैसेज दिख सकता है.
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
डिफ़ॉल्ट: | सही |
मौजूदगी: | ज़रूरी नहीं |
टाइप: |
बूलियन |
<User> एलिमेंट
- कोड में बदलने के लिए,
<User>
एलिमेंट का इस्तेमाल करके उपयोगकर्ता नाम वाले वैरिएबल के बारे में बताएं. उपयोगकर्ता नाम और पासवर्ड की वैल्यू को Base64 कोड में बदलने से पहले, कोलन लगाकर जोड़ा जाता है. - डिकोड करने के लिए, वह वैरिएबल डालें जहां डिकोड किया गया उपयोगकर्ता नाम लिखा गया है.
<User ref="request.queryparam.username" />
डिफ़ॉल्ट: | लागू नहीं |
मौजूदगी: | ज़रूरी है |
टाइप: |
लागू नहीं |
एट्रिब्यूट
एट्रिब्यूट | ब्यौरा | डिफ़ॉल्ट | मौजूदगी |
---|---|---|---|
संदर्भ |
वह वैरिएबल जिससे नीति डाइनैमिक तौर पर उपयोगकर्ता नाम (कोड में बदलना) को पढ़ती है या उपयोगकर्ता नाम (डीकोड) को लिखती है. |
लागू नहीं | ज़रूरी है |
<Password> एलिमेंट
- कोड में बदलने के लिए,
<Password>
एलिमेंट का इस्तेमाल करके पासवर्ड वाले वैरिएबल की जानकारी दें. - डिकोड करने के लिए, वह वैरिएबल डालें जहां डिकोड किया गया पासवर्ड लिखा गया है.
<Password ref="request.queryparam.password" />
डिफ़ॉल्ट: | लागू नहीं |
मौजूदगी: | ज़रूरी है |
टाइप: |
लागू नहीं |
एट्रिब्यूट
एट्रिब्यूट | ब्यौरा | डिफ़ॉल्ट | मौजूदगी |
---|---|---|---|
संदर्भ |
वह वैरिएबल जिससे नीति डाइनैमिक तौर पर पासवर्ड (एन्कोड) को पढ़ती है या पासवर्ड (डिकोड) लिखती है. |
लागू नहीं | ज़रूरी है |
<assignTo> एलिमेंट
इस नीति से जनरेट की गई, कोड में बदली गई या डिकोड की गई वैल्यू के साथ, टारगेट वैरिएबल को सेट किया जाता है.
इस उदाहरण में बताया गया है कि नीति को मैसेज के Authorization
हेडर को, जनरेट की गई वैल्यू पर सेट करना चाहिए:
<AssignTo createNew="false">request.header.Authorization</AssignTo>
डिफ़ॉल्ट: | लागू नहीं |
मौजूदगी: | ज़रूरी है |
टाइप: |
String |
एट्रिब्यूट
एट्रिब्यूट | ब्यौरा | डिफ़ॉल्ट | मौजूदगी |
---|---|---|---|
createNew | यह तय करता है कि अगर वैरिएबल पहले से सेट है,
तो नीति को वैरिएबल को ओवरराइट करना चाहिए या नहीं.
"गलत" होने पर, वैरिएबल को असाइन करने का काम सिर्फ़ तब होता है, जब वैरिएबल को फ़िलहाल सेट नहीं किया गया हो. "सही" होने पर, वैरिएबल को असाइन हमेशा किया जाता है. आम तौर पर, इस एट्रिब्यूट को "गलत" (डिफ़ॉल्ट) पर सेट किया जाता है. |
false | ज़रूरी नहीं |
<सोर्स> एलिमेंट
डिकोड करने के लिए, ऐसा वैरिएबल जिसमें Base64 कोड में बदली गई स्ट्रिंग, Basic
Base64EncodedString
के तौर पर होती है. उदाहरण के लिए,
ऑथराइज़ेशन हेडर से जुड़ा request.header.Authorization
बताएं.
<Source>request.header.Authorization</Source>
डिफ़ॉल्ट: | लागू नहीं |
मौजूदगी: | डिकोड करने की कार्रवाई के लिए ज़रूरी है. |
टाइप: |
लागू नहीं |
फ़्लो वैरिएबल
इस नीति के काम न करने पर, इन फ़्लो वैरिएबल को सेट किया जाता है:
BasicAuthentication.{policy_name}.failed
(सही वैल्यू के साथ)
गड़बड़ी का रेफ़रंस
यह सेक्शन गड़बड़ी के कोड और दिखाए गए गड़बड़ी के मैसेज के बारे में बताता है. साथ ही, इस नीति के ट्रिगर होने पर Edge की मदद से सेट की गई गड़बड़ी के वैरिएबल के बारे में बताता है. यह जानकारी जानना ज़रूरी है कि क्या गड़बड़ियों को ठीक करने के लिए, गड़बड़ी से जुड़े नियम बनाए जा रहे हैं. ज़्यादा जानने के लिए, नीति से जुड़ी गड़बड़ियों के बारे में आपके लिए ज़रूरी जानकारी और गड़बड़ियों को ठीक करने के तरीके देखें.
रनटाइम से जुड़ी गड़बड़ियां
नीति के लागू होने पर ये गड़बड़ियां हो सकती हैं.
गड़बड़ी का कोड | एचटीटीपी कोड स्थिति | वजह | समाधान |
---|---|---|---|
steps.basicauthentication.InvalidBasicAuthenticationSource |
500 | डिकोड करने पर, जब Base64 कोड में बदली गई स्ट्रिंग में कोई मान्य वैल्यू नहीं होती या हेडर सही नहीं होता है. जैसे, "बेसिक" से शुरू नहीं होता है. | build |
steps.basicauthentication.UnresolvedVariable |
500 | डिकोड या कोड में बदलने के लिए, ज़रूरी सोर्स वैरिएबल मौजूद नहीं हैं. यह गड़बड़ी सिर्फ़ तब हो सकती है, जब IgnoreUnresolvedVariables गलत हो. |
build |
डिप्लॉयमेंट से जुड़ी गड़बड़ियां
ये गड़बड़ियां तब हो सकती हैं, जब इस नीति वाले किसी प्रॉक्सी को डिप्लॉय किया जाता है.
गड़बड़ी का नाम | कब होता है | समाधान |
---|---|---|
UserNameRequired |
नाम वाली कार्रवाई के लिए, <User> एलिमेंट मौजूद होना चाहिए. |
build |
PasswordRequired |
नाम वाली कार्रवाई के लिए, <Password> एलिमेंट मौजूद होना चाहिए. |
build |
AssignToRequired |
नाम वाली कार्रवाई के लिए, <AssignTo> एलिमेंट मौजूद होना चाहिए. |
build |
SourceRequired |
नाम वाली कार्रवाई के लिए, <Source> एलिमेंट मौजूद होना चाहिए. |
build |
गड़बड़ी वाले वैरिएबल
रनटाइम में कोई गड़बड़ी होने पर ये वैरिएबल सेट किए जाते हैं. ज़्यादा जानकारी के लिए, नीति से जुड़ी गड़बड़ियों के बारे में आपके लिए ज़रूरी जानकारी देखें.
वैरिएबल | जगह | उदाहरण |
---|---|---|
fault.name="fault_name" |
fault_name, गड़बड़ी का नाम है, जैसा कि ऊपर रनटाइम की गड़बड़ियां टेबल में दिया गया है. गड़बड़ी का नाम, गड़बड़ी के कोड का आखिरी हिस्सा होता है. | fault.name Matches "UnresolvedVariable" |
BasicAuthentication.policy_name.failed |
policy_name, उस नीति का उपयोगकर्ता तय किया गया नाम है जिसकी वजह से गड़बड़ी हुई है. | BasicAuthentication.BA-Authenticate.failed = true |
गड़बड़ी के जवाब का उदाहरण
{ "fault":{ "detail":{ "errorcode":"steps.basicauthentication.UnresolvedVariable" }, "faultstring":"Unresolved variable : request.queryparam.password" } }
गड़बड़ी के नियम का उदाहरण
<FaultRule name="Basic Authentication Faults"> <Step> <Name>AM-UnresolvedVariable</Name> <Condition>(fault.name Matches "UnresolvedVariable") </Condition> </Step> <Step> <Name>AM-AuthFailedResponse</Name> <Condition>(fault.name = "InvalidBasicAuthenticationSource")</Condition> </Step> <Condition>(BasicAuthentication.BA-Authentication.failed = true) </Condition> </FaultRule>