شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید . اطلاعات
چه
شما را قادر میسازد تا از احراز هویت پایه سبک برای امنیت در آخرین مرحله استفاده کنید. این خطمشی یک نام کاربری و رمز عبور دریافت میکند، Base64 آنها را رمزگذاری میکند و مقدار حاصل را در یک متغیر مینویسد. مقدار حاصل به شکل Basic Base64EncodedString است. شما معمولاً این مقدار را در یک هدر HTTP، مانند هدر 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> مشخص شدهاند، مشتق میشوند. متغیرها باید قبل از اجرای این سیاست تنظیم شوند. معمولاً متغیرها با مقادیری که از یک نقشه کلید/مقدار خوانده میشوند، پر میشوند. به سیاست عملیات نقشه کلید-مقدار مراجعه کنید.
این پیکربندی منجر به اضافه شدن هدر HTTP با نام Authorization میشود که توسط عنصر <AssignTo> مشخص شده است و به پیام درخواست خروجی ارسال شده به سرور backend اضافه میشود:
Authorization: Basic TXlVc2VybmFtZTpNeVBhc3N3b3Jk
مقادیر <User> و <Password> قبل از کدگذاری Base64 با یک دونقطه به هم متصل میشوند.
فرض کنید یک نگاشت کلید/مقدار با ورودی زیر دارید:
{
"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>
در این نمونه سیاست، سیاست، نام کاربری و رمز عبور را از سربرگ HTTP 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 async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1">
جدول زیر ویژگی هایی را توصیف می کند که برای همه عناصر اصلی خط مشی مشترک هستند:
| صفت | توضیحات | پیش فرض | حضور |
|---|---|---|---|
name | نام داخلی سیاست. مقدار مشخصه در صورت تمایل، از عنصر | N/A | مورد نیاز |
continueOnError | برای بازگرداندن خطا در صورت شکست خط مشی، روی روی | نادرست | اختیاری |
enabled | برای اجرای خط مشی روی برای خاموش کردن خط مشی، روی | درست است | اختیاری |
async | این ویژگی منسوخ شده است. | نادرست | منسوخ شده است |
عنصر <DisplayName>
علاوه بر ویژگی name برای برچسبگذاری خطمشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.
<DisplayName>Policy Display Name</DisplayName>
| پیش فرض | N/A اگر این عنصر را حذف کنید، از مقدار ویژگی |
|---|---|
| حضور | اختیاری |
| تایپ کنید | رشته |
عنصر <عملیات>
تعیین میکند که آیا سیاست Base64 اعتبارنامهها را رمزگذاری یا رمزگشایی میکند.
<Operation>Encode</Operation>
| پیشفرض: | ناموجود |
| حضور: | مورد نیاز |
| نوع: | رشته. مقادیر معتبر عبارتند از:
|
عنصر <نادیده گرفتن متغیرهای حل نشده>
وقتی روی true تنظیم شود، اگر متغیری قابل حل نباشد، این خطمشی خطایی ایجاد نمیکند. وقتی در چارچوب خطمشی BasicAuthentication استفاده شود، معمولاً روی false تنظیم میشود زیرا معمولاً مفید است که اگر نام کاربری یا رمز عبور در متغیرهای مشخص شده یافت نشود، خطا ایجاد شود.
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
| پیشفرض: | درست |
| حضور: | اختیاری |
| نوع: | بولی |
عنصر <کاربر>
- برای رمزگذاری، از عنصر
<User>برای مشخص کردن متغیر حاوی نام کاربری استفاده کنید. مقادیر نام کاربری و رمز عبور قبل از رمزگذاری Base64 با یک دونقطه به هم متصل میشوند. - برای رمزگشایی، متغیری را که نام کاربری رمزگشایی شده در آن نوشته شده است، مشخص کنید.
<User ref="credentials.username" />
| پیشفرض: | ناموجود |
| حضور: | مورد نیاز |
| نوع: | ناموجود |
ویژگیها
| ویژگی | توضیحات | پیشفرض | حضور |
|---|---|---|---|
| مرجع | متغیری که سیاست به صورت پویا نام کاربری را از آن میخواند (رمزگذاری میکند) یا نام کاربری را مینویسد (رمزگشایی میکند). | ناموجود | مورد نیاز |
عنصر <رمز عبور>
- برای رمزگذاری، از عنصر
<Password>برای مشخص کردن متغیر حاوی رمز عبور استفاده کنید. - برای رمزگشایی، متغیری را که رمز عبور رمزگشایی شده در آن نوشته شده است، مشخص کنید.
<Password ref="credentials.password" />
| پیشفرض: | ناموجود |
| حضور: | مورد نیاز |
| نوع: | ناموجود |
ویژگیها
| ویژگی | توضیحات | پیشفرض | حضور |
|---|---|---|---|
| مرجع | متغیری که سیاست به صورت پویا رمز عبور را از آن میخواند (رمزگذاری میکند) یا رمز عبور را مینویسد (رمزگشایی میکند). | ناموجود | مورد نیاز |
عنصر <AssignTo>
برای عملیات Encode ، متغیر هدف را برای تنظیم با مقدار رمزگذاری شده تولید شده توسط این خطمشی مشخص میکند.
مثال زیر نشان میدهد که این سیاست باید هدر Authorization پیام را روی مقدار تولید شده تنظیم کند:
<AssignTo createNew="false">request.header.Authorization</AssignTo>
| پیشفرض: | ناموجود |
| حضور: | برای عملیات Encode مورد نیاز است. |
| نوع: | رشته |
ویژگیها
| ویژگی | توضیحات | پیشفرض | حضور |
|---|---|---|---|
| ایجادجدید | تعیین میکند که آیا اگر متغیر از قبل تنظیم شده باشد، سیاست باید آن را بازنویسی کند یا خیر. وقتی "false" باشد، انتساب به متغیر فقط در صورتی رخ میدهد که متغیر در حال حاضر تنظیم نشده باشد (null). وقتی "true" باشد، انتساب به متغیر همیشه رخ میدهد. شما معمولاً این ویژگی را روی "false" (پیشفرض) تنظیم میکنید. | نادرست | اختیاری |
عنصر <منبع>
برای رمزگشایی، متغیر حاوی رشته کدگذاری شده Base64، به شکل Basic Base64EncodedString . برای مثال، request.header.Authorization را که مربوط به هدر Authorization است، مشخص کنید.
<Source>request.header.Authorization</Source>
| پیشفرض: | ناموجود |
| حضور: | برای عملیات رمزگشایی مورد نیاز است. |
| نوع: | ناموجود |
متغیرهای جریان
متغیر جریان زیر زمانی تنظیم میشود که سیاست با شکست مواجه شود:
-
BasicAuthentication.{policy_name}.failed(با مقدار true)
مرجع خطا
این بخش کدهای خطا و پیامهای خطایی را که برگردانده میشوند و متغیرهای خطا را که توسط Edge تنظیم میشوند، هنگامی که این خطمشی خطا را راهاندازی میکند، توضیح میدهد. این اطلاعات برای دانستن اینکه آیا در حال توسعه قوانین خطا برای رسیدگی به خطاها هستید، مهم است. برای کسب اطلاعات بیشتر، آنچه را که باید در مورد خطاهای خط مشی و مدیریت خطاها بدانید را ببینید.
خطاهای زمان اجرا
این خطاها ممکن است هنگام اجرای سیاست رخ دهند.
| کد خطا | وضعیت HTTP | علت | رفع کنید |
|---|---|---|---|
steps.basicauthentication.InvalidBasicAuthenticationSource | 500 | در رمزگشایی که رشته رمزگذاری شده Base64 ورودی حاوی مقدار معتبری نیست یا سربرگ بد شکل است (مثلاً با "Basic" شروع نمی شود). | 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 نام خطا است، همانطور که در جدول خطاهای Runtime در بالا ذکر شده است. نام خطا آخرین قسمت کد خطا است. | 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>