यह Apigee Edge के दस्तावेज़ हैं.
पर जाएं
Apigee X दस्तावेज़. info
क्या
इस नीति की मदद से, लास्ट-माइल सुरक्षा
के लिए, पुष्टि करने के बुनियादी तरीके का इस्तेमाल किया जा सकता है. यह नीति, उपयोगकर्ता नाम और पासवर्ड लेती है. इसके बाद, उन्हें Base64 कोड में बदलती है और नतीजों को किसी वैरिएबल में लिखती है.
नतीजा, Basic
Base64EncodedString के फ़ॉर्मैट में होता है. आम तौर पर, इस वैल्यू को एचटीटीपी हेडर में लिखा जाता है. जैसे,
Authorization हेडर.
इस नीति की मदद से, Base64 कोड में बदली गई स्ट्रिंग में सेव किए गए क्रेडेंशियल को, उपयोगकर्ता नाम और पासवर्ड में डिकोड भी किया जा सकता है.
वीडियो: इस वीडियो में, पुष्टि करने के बुनियादी तरीके की नीति का इस्तेमाल करके, उपयोगकर्ता नाम और पासवर्ड को base64 कोड में बदलने का तरीका बताया गया है.
वीडियो: इस वीडियो में, पुष्टि करने के बुनियादी तरीके की नीति का इस्तेमाल करके, base64 कोड में बदले गए उपयोगकर्ता नाम और पासवर्ड को डिकोड करने का तरीका बताया गया है.
सैंपल
आउटबाउंड एन्कोडिंग
<BasicAuthentication name="ApplyBasicAuthHeader"> <DisplayName>ApplyBasicAuthHeader</DisplayName> <Operation>Encode</Operation> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <User ref="credentials.username" /> <Password ref="credentials.password" /> <AssignTo createNew="false">request.header.Authorization</AssignTo> </BasicAuthentication>
ऊपर दिए गए नीति के सैंपल कॉन्फ़िगरेशन में, कोड में बदले जाने वाले उपयोगकर्ता नाम और पासवर्ड,
ref एट्रिब्यूट से तय किए गए वैरिएबल से लिए जाते हैं जो
<User> और <Password> एलिमेंट पर दिए गए हैं. इस नीति के लागू होने से पहले, वैरिएबल सेट किए जाने चाहिए. आम तौर पर, वैरिएबल में ऐसी वैल्यू होती हैं जिन्हें
कुंजी/वैल्यू मैप से पढ़ा जाता है. कुंजी-वैल्यू मैप के ऑपरेशन की नीति देखें.
इस कॉन्फ़िगरेशन के तहत, बैकएंड सर्वर को भेजे गए आउटबाउंड अनुरोध वाले मैसेज में, Authorization नाम का एचटीटीपी हेडर जोड़ा जाता है. इसे <AssignTo> एलिमेंट से तय किया जाता है:
Authorization: Basic TXlVc2VybmFtZTpNeVBhc3N3b3Jk
Base64 कोड में बदलने से पहले, <User> और <Password> की वैल्यू को कोलन के साथ जोड़ा जाता है.
मान लें कि आपके पास कोई कुंजी/वैल्यू मैप है, जिसमें यह एंट्री शामिल है:
{
"encrypted" : true,
"entry" : [ {
"name" : "username",
"value" : "MyUsername"
}, {
"name" : "password",
"value" : "MyPassword"
} ],
"name" : "BasicAuthCredentials"
}
कुंजी/वैल्यू स्टोर से अपने <User> और <Password> एलिमेंट की वैल्यू निकालने और उन्हें credentials.username और credentials.password वैरिएबल में भरने के लिए, BasicAuthentication नीति से पहले, कुंजी-वैल्यू मैप के ऑपरेशन की ये नीतियां जोड़ें.
<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="credentials.username" /> <Password ref="credentials.password" /> <AssignTo createNew="false">request.header.Authorization</AssignTo> <Source>request.header.Authorization</Source> </BasicAuthentication>
<BasicAuthentication> एट्रिब्यूट
<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1">
यहां दी गई टेबल में, ऐसे एट्रिब्यूट के बारे में बताया गया है जो नीति के सभी पैरंट एलिमेंट में एक जैसे होते हैं:
| एट्रिब्यूट | ब्यौरा | डिफ़ॉल्ट | मौजूदगी |
|---|---|---|---|
name |
नीति का अंदरूनी नाम. इसके अलावा, नीति को लेबल करने के लिए, |
लागू नहीं | ज़रूरी है |
continueOnError |
किसी नीति के काम न करने पर, गड़बड़ी दिखाने के लिए नीति के लागू होने के बाद भी फ़्लो को एक्ज़ीक्यूट करने के लिए, इसे |
गलत | वैकल्पिक |
enabled |
नीति को लागू करने के लिए, नीति को बंद करने के लिए, |
सही | वैकल्पिक |
async |
यह एट्रिब्यूट अब काम नहीं करता. |
गलत | बहिष्कृत |
<DisplayName> एलिमेंट
इस कॉलम में नीति को लेबल करने के लिए, name एट्रिब्यूट के साथ-साथ इस्तेमाल करें
मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर, जिसका नाम अलग और सामान्य भाषा में है.
<DisplayName>Policy Display Name</DisplayName>
| डिफ़ॉल्ट |
लागू नहीं अगर आप इस एलिमेंट को छोड़ देते हैं, तो नीति की |
|---|---|
| मौजूदगी | वैकल्पिक |
| टाइप | स्ट्रिंग |
<Operation> एलिमेंट
इससे यह तय होता है कि नीति, क्रेडेंशियल को Base64 कोड में बदलती है या डिकोड करती है.
<Operation>Encode</Operation>
| डिफ़ॉल्ट: | लागू नहीं |
| मौजूदगी: | ज़रूरी है |
| टाइप: |
स्ट्रिंग. ये वैल्यू मान्य हैं:
|
<IgnoreUnresolvedVariables> एलिमेंट
अगर इसे true पर सेट किया जाता है, तो किसी वैरिएबल को हल न कर पाने पर, नीति कोई गड़बड़ी नहीं दिखाएगी. BasicAuthentication नीति के संदर्भ में इस्तेमाल किए जाने पर, इस सेटिंग को आम तौर पर
false पर सेट किया जाता है. ऐसा इसलिए, क्योंकि अगर तय किए गए वैरिएबल में उपयोगकर्ता नाम या
पासवर्ड नहीं मिलता है, तो गड़बड़ी दिखाना आम तौर पर फ़ायदेमंद होता है.
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
| डिफ़ॉल्ट: | सही |
| मौजूदगी: | वैकल्पिक |
| टाइप: |
बूलियन |
<User> एलिमेंट
- कोड में बदलने के लिए,
<User>एलिमेंट का इस्तेमाल करें, उपयोगकर्ता नाम वाले वैरिएबल को तय करने के लिए. उपयोगकर्ता नाम और पासवर्ड की वैल्यू को Base64 कोड में बदलने से पहले, कोलन के साथ जोड़ा जाता है. - डिकोड करने के लिए, उस वैरिएबल को तय करें जिसमें डिकोड किया गया उपयोगकर्ता नाम लिखा जाता है.
<User ref="credentials.username" />
| डिफ़ॉल्ट: | लागू नहीं |
| मौजूदगी: | ज़रूरी है |
| टाइप: |
लागू नहीं |
एट्रिब्यूट
| एट्रिब्यूट | ब्यौरा | डिफ़ॉल्ट | मौजूदगी |
|---|---|---|---|
| ref |
वह वैरिएबल जिससे नीति, उपयोगकर्ता नाम को डाइनैमिक तरीके से पढ़ती है (कोड में बदलना) या उपयोगकर्ता नाम को लिखती है (डिकोड करना). |
लागू नहीं | ज़रूरी है |
<Password> एलिमेंट
- कोड में बदलने के लिए, पासवर्ड वाले वैरिएबल को तय करने के लिए,
<Password>एलिमेंट का इस्तेमाल करें. - डिकोड करने के लिए, उस वैरिएबल को तय करें जिसमें डिकोड किया गया पासवर्ड लिखा जाता है.
<Password ref="credentials.password" />
| डिफ़ॉल्ट: | लागू नहीं |
| मौजूदगी: | ज़रूरी है |
| टाइप: |
लागू नहीं |
एट्रिब्यूट
| एट्रिब्यूट | ब्यौरा | डिफ़ॉल्ट | मौजूदगी |
|---|---|---|---|
| ref |
वह वैरिएबल जिससे नीति, पासवर्ड को डाइनैमिक तरीके से पढ़ती है (कोड में बदलना) या पासवर्ड को लिखती है पासवर्ड (डिकोड करना). |
लागू नहीं | ज़रूरी है |
<AssignTo> एलिमेंट
`Encode` ऑपरेशन के लिए, टारगेट वैरिएबल तय करता है. इस वैरिएबल को, इस नीति से जनरेट की गई कोड में बदली गई वैल्यू `
` के साथ सेट किया जाता है.
यहां दिए गए उदाहरण से पता चलता है कि नीति को, मैसेज के Authorization
हेडर को जनरेट की गई वैल्यू पर सेट करना चाहिए:
<AssignTo createNew="false">request.header.Authorization</AssignTo>
| डिफ़ॉल्ट: | लागू नहीं |
| मौजूदगी: | Encode ऑपरेशन के लिए ज़रूरी है. |
| टाइप: |
स्ट्रिंग |
एट्रिब्यूट
| एट्रिब्यूट | ब्यौरा | डिफ़ॉल्ट | मौजूदगी |
|---|---|---|---|
| createNew | इससे यह तय होता है कि अगर वैरिएबल पहले से
सेट है, तो नीति को वैरिएबल को ओवरराइट करना चाहिए या नहीं.
"गलत" होने पर, वैरिएबल को असाइनमेंट सिर्फ़ तब होता है, जब वैरिएबल फ़िलहाल सेट न हो (शून्य). "सही" होने पर, वैरिएबल को असाइनमेंट हमेशा होता है. आम तौर पर, इस एट्रिब्यूट को "गलत" (डिफ़ॉल्ट) पर सेट किया जाता है. |
गलत | वैकल्पिक |
<Source> एलिमेंट
डिकोड करने के लिए, Base64 कोड में बदली गई स्ट्रिंग वाला वैरिएबल. यह वैरिएबल, फ़ॉर्मैट में होता है Basic Base64EncodedString. उदाहरण के लिए,
request.header.Authorization तय करें, जो 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>