पुष्टि करने की बुनियादी नीति

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

नीति का अंदरूनी नाम. name एट्रिब्यूट की वैल्यू में अक्षर, संख्याएं, स्पेस, हाइफ़न, अंडरस्कोर, और पीरियड शामिल किए जा सकते हैं. इस वैल्यू में 255 से ज़्यादा वर्ण नहीं हो सकते.

इसके अलावा, मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर में नीति को आम भाषा में अलग नाम से लेबल करने के लिए, <DisplayName> एलिमेंट का इस्तेमाल करें.

लागू नहीं ज़रूरी है
continueOnError

इस नीति को false पर सेट करें, ताकि नीति के काम न करने पर गड़बड़ी का मैसेज दिखे. ज़्यादातर नीतियों में, ऐसा आम तौर पर किया जाता है.

किसी नीति के काम न करने पर भी फ़्लो एक्ज़ीक्यूट करने की प्रोसेस को जारी रखने के लिए, true पर सेट करें.

false ज़रूरी नहीं
enabled

नीति लागू करने के लिए, true पर सेट करें.

नीति को बंद करने के लिए, false पर सेट करें. अगर यह नीति किसी फ़्लो से जुड़ी हुई है, तब भी उसे लागू नहीं किया जाएगा.

सही ज़रूरी नहीं
async

यह एट्रिब्यूट अब काम नहीं करता.

false बहिष्कृत

<DisplayName> एलिमेंट

मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर में, आम भाषा के अलग नाम से नीति को लेबल करने के लिए, name एट्रिब्यूट का इस्तेमाल करें.

<DisplayName>Policy Display Name</DisplayName>
डिफ़ॉल्ट

लागू नहीं

अगर इस एलिमेंट को छोड़ दिया जाता है, तो नीति के name एट्रिब्यूट की वैल्यू का इस्तेमाल किया जाता है.

मौजूदगी ज़रूरी नहीं
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 कोड में बदली गई स्ट्रिंग में कोई मान्य वैल्यू नहीं होती या हेडर सही नहीं होता है. जैसे, "बेसिक" से शुरू नहीं होता है.
steps.basicauthentication.UnresolvedVariable 500 डिकोड या कोड में बदलने के लिए, ज़रूरी सोर्स वैरिएबल मौजूद नहीं हैं. यह गड़बड़ी सिर्फ़ तब हो सकती है, जब IgnoreUnresolvedVariables गलत हो.

डिप्लॉयमेंट से जुड़ी गड़बड़ियां

ये गड़बड़ियां तब हो सकती हैं, जब इस नीति वाले किसी प्रॉक्सी को डिप्लॉय किया जाता है.

गड़बड़ी का नाम कब होता है समाधान
UserNameRequired नाम वाली कार्रवाई के लिए, <User> एलिमेंट मौजूद होना चाहिए.
PasswordRequired नाम वाली कार्रवाई के लिए, <Password> एलिमेंट मौजूद होना चाहिए.
AssignToRequired नाम वाली कार्रवाई के लिए, <AssignTo> एलिमेंट मौजूद होना चाहिए.
SourceRequired नाम वाली कार्रवाई के लिए, <Source> एलिमेंट मौजूद होना चाहिए.

गड़बड़ी वाले वैरिएबल

रनटाइम में कोई गड़बड़ी होने पर ये वैरिएबल सेट किए जाते हैं. ज़्यादा जानकारी के लिए, नीति से जुड़ी गड़बड़ियों के बारे में आपके लिए ज़रूरी जानकारी देखें.

वैरिएबल जगह उदाहरण
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>

स्कीमा

मिलते-जुलते विषय

की वैल्यू मैप ऑपरेशन की नीति