आपको Apigee Edge का दस्तावेज़ दिख रहा है.
Apigee X के दस्तावेज़ पर जाएं. जानकारी
क्या
इस कुकी की मदद से, लास्ट-माइल सिक्योरिटी के लिए सामान्य पुष्टि का इस्तेमाल किया जा सकता है. यह नीति, उपयोगकर्ता नाम और पासवर्ड लेती है. इसके बाद, उन्हें 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>
ऊपर दिए गए नीति के कॉन्फ़िगरेशन के सैंपल में, एन्कोड किए जाने वाले उपयोगकर्ता नाम और पासवर्ड को <User> और <Password> एलिमेंट पर मौजूद ref एट्रिब्यूट से मिले वैरिएबल से लिया गया है. इस नीति को लागू करने से पहले, वैरिएबल सेट किए जाने चाहिए. आम तौर पर, वैरिएबल में ऐसी वैल्यू भरी जाती हैं जिन्हें कुंजी/वैल्यू मैप से पढ़ा जाता है. Key Value Map
Operations की नीति देखें.
इस कॉन्फ़िगरेशन से, Authorization नाम का एचटीटीपी हेडर मिलता है. इसे <AssignTo> एलिमेंट के ज़रिए तय किया जाता है. इसे बैकएंड सर्वर को भेजे गए आउटबाउंड अनुरोध मैसेज में जोड़ा जाता है:
Authorization: Basic TXlVc2VybmFtZTpNeVBhc3N3b3Jk
Base64 एन्कोडिंग से पहले, <User> और <Password> वैल्यू को कोलन के साथ जोड़ा जाता है.
मान लें कि आपके पास एक कुंजी/वैल्यू मैप है, जिसमें यह एंट्री है:
{
"encrypted" : true,
"entry" : [ {
"name" : "username",
"value" : "MyUsername"
}, {
"name" : "password",
"value" : "MyPassword"
} ],
"name" : "BasicAuthCredentials"
}
KeyValueMapOperations की इन नीतियों को BasicAuthentication नीति से पहले अटैच करें, ताकि कुंजी/वैल्यू स्टोर से <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>
इस नीति के सैंपल में, नीति <Source> एलिमेंट के ज़रिए तय किए गए Authorization एचटीटीपी हेडर से उपयोगकर्ता नाम और पासवर्ड को डिकोड करती है. Base64 कोड में बदली गई स्ट्रिंग, इस फ़ॉर्मैट में होनी चाहिए Basic Base64EncodedString.
यह नीति, डिकोड किए गए उपयोगकर्ता नाम को request.header.username वैरिएबल में लिखती है. साथ ही, डिकोड किए गए पासवर्ड को request.header.password वैरिएबल में लिखती है.
बुनियादी पुष्टि करने की नीति के बारे में जानकारी
इस नीति के तहत, दो मोड में काम किया जाता है:
- Encode: यह फ़ंक्शन, वैरिएबल में सेव किए गए उपयोगकर्ता नाम और पासवर्ड को Base64 में बदलता है
- डिकोड करना: Base64 एन्कोड की गई स्ट्रिंग से उपयोगकर्ता नाम और पासवर्ड को डिकोड करता है
उपयोगकर्ता नाम और पासवर्ड को आम तौर पर, कुंजी/वैल्यू स्टोर में सेव किया जाता है. इसके बाद, रनटाइम में कुंजी/वैल्यू स्टोर से इन्हें पढ़ा जाता है. कुंजी/वैल्यू स्टोर का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, Key Value Map Operations policy देखें.
एलिमेंट का रेफ़रंस
इस एलिमेंट रेफ़रंस में, 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 | इससे यह तय होता है कि अगर वैरिएबल पहले से सेट है, तो क्या नीति को वैरिएबल को ओवरराइट करना चाहिए.
जब "false" होता है, तो वैरिएबल को असाइनमेंट सिर्फ़ तब होता है, जब वैरिएबल फ़िलहाल सेट न हो (शून्य). "सही है" होने पर, वैरिएबल को हमेशा असाइनमेंट मिलता है. आम तौर पर, इस एट्रिब्यूट को "false" (डिफ़ॉल्ट) पर सेट किया जाता है. |
गलत | वैकल्पिक |
<Source> एलिमेंट
डिकोड करने के लिए, Base64 एन्कोड की गई स्ट्रिंग वाला वैरिएबल, Basic Base64EncodedString के फ़ॉर्म में. उदाहरण के लिए, Authorization हेडर के लिए, request.header.Authorization तय करें.
<Source>request.header.Authorization</Source>
| डिफ़ॉल्ट: | लागू नहीं |
| मौजूदगी: | डिकोड करने की कार्रवाई के लिए ज़रूरी है. |
| टाइप: |
लागू नहीं |
फ़्लो वैरिएबल
नीति के लागू न होने पर, यह फ़्लो वैरिएबल सेट किया जाता है:
BasicAuthentication.{policy_name}.failed(जिसकी वैल्यू सही है)
गड़बड़ी की जानकारी
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle errors. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
steps.basicauthentication.InvalidBasicAuthenticationSource |
500 | On a decode when the incoming Base64 encoded string does not contain a valid value or the header is malformed (e.g., does not start with "Basic"). | build |
steps.basicauthentication.UnresolvedVariable |
500 | The required source variables for the decode or encode are not present. This error can
only occur if IgnoreUnresolvedVariables is false. |
build |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
| Error name | Occurs when | Fix |
|---|---|---|
UserNameRequired |
The <User> element must be present for the named operation. |
build |
PasswordRequired |
The <Password> element must be present for the named operation. |
build |
AssignToRequired |
The <AssignTo> element must be present for the named operation. |
build |
SourceRequired |
The <Source> element must be present for the named operation. |
build |
Fault variables
These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.
| Variables | Where | Example |
|---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "UnresolvedVariable" |
BasicAuthentication.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | BasicAuthentication.BA-Authenticate.failed = true |
Example error response
{ "fault":{ "detail":{ "errorcode":"steps.basicauthentication.UnresolvedVariable" }, "faultstring":"Unresolved variable : request.queryparam.password" } }
Example fault rule
<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>