شما در حال مشاهده اسناد 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="BasicAuth.credentials.username" /> <Password ref="BasicAuth.credentials.password" /> <AssignTo createNew="false">request.header.Authorization</AssignTo> </BasicAuthentication>
در پیکربندی نمونه خط مشی بالا، نام کاربری و رمز عبوری که باید رمزگذاری شوند از متغیرهای مشخص شده توسط ویژگی های ref
در عناصر <User>
و <Password>
مشتق شده اند. متغیرها باید قبل از اجرای این سیاست تنظیم شوند. به طور معمول، متغیرها با مقادیری پر می شوند که از نقشه کلید/مقدار خوانده می شوند. به خط مشی عملیات نقشه ارزش کلیدی مراجعه کنید.
این پیکربندی منجر به این می شود که هدر HTTP با نام Authorization ، همانطور که توسط عنصر <AssignTo> مشخص شده است، به پیام درخواست خروجی ارسال شده به سرور پشتیبان اضافه شود:
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>
در این نمونه خطمشی، خطمشی نام کاربری و رمز عبور را از سربرگ Authorization
HTTP، همانطور که توسط عنصر <Source> مشخص شده است، رمزگشایی میکند. رشته کدگذاری شده Base64 باید به شکل Basic Base64EncodedString.
خط مشی نام کاربری رمزگشایی شده را در متغیر request.header.username و رمز رمزگشایی شده را در متغیر request.header.password می نویسد.
درباره سیاست احراز هویت اولیه
این سیاست دارای دو حالت عملیاتی است:
- Encode : 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>
ویژگی های <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 اگر این عنصر را حذف کنید، از مقدار ویژگی |
---|---|
حضور | اختیاری |
تایپ کنید | رشته |
عنصر <Operation>
تعیین می کند که آیا خط مشی Base64 اعتبارنامه ها را رمزگذاری یا رمزگشایی می کند.
<Operation>Encode</Operation>
پیش فرض: | N/A |
حضور: | مورد نیاز |
نوع: | رشته مقادیر معتبر عبارتند از:
|
عنصر <IgnoreUnresolvedVariables>
وقتی روی true
تنظیم شود، اگر متغیری قابل حل نباشد، خط مشی خطایی ایجاد نمی کند. هنگامی که در زمینه یک خطمشی BasicAuthentication استفاده میشود، این تنظیم معمولاً روی false
تنظیم میشود، زیرا اگر نام کاربری یا رمز عبور در متغیرهای مشخصشده یافت نشد، معمولاً خطا ایجاد میکند.
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
پیش فرض: | درست است |
حضور: | اختیاری |
نوع: | بولی |
عنصر <کاربر>
- برای رمزگذاری، از عنصر
<User>
برای تعیین متغیر حاوی نام کاربری استفاده کنید. مقادیر نام کاربری و رمز عبور قبل از رمزگذاری Base64 با یک دونقطه الحاق می شوند. - برای رمزگشایی، متغیری را که نام کاربری رمزگشایی شده در آن نوشته شده است را مشخص کنید.
<User ref="request.queryparam.username" />
پیش فرض: | N/A |
حضور: | مورد نیاز |
نوع: | N/A |
صفات
صفت | توضیحات | پیش فرض | حضور |
---|---|---|---|
رجوع کنید | متغیری که خط مشی به صورت پویا نام کاربری را می خواند (رمزگذاری) یا نام کاربری را می نویسد (کد). | N/A | مورد نیاز |
عنصر <گذرواژه>
- برای رمزگذاری، از عنصر
<Password>
برای تعیین متغیر حاوی رمز عبور استفاده کنید. - برای رمزگشایی، متغیری را که رمز رمزگشایی شده در آن نوشته شده است، مشخص کنید.
<Password ref="request.queryparam.password" />
پیش فرض: | N/A |
حضور: | مورد نیاز |
نوع: | N/A |
صفات
صفت | توضیحات | پیش فرض | حضور |
---|---|---|---|
رجوع کنید | متغیری که خط مشی به صورت پویا رمز عبور را می خواند (کد) یا رمز عبور را می نویسد (رمزگشایی). | N/A | مورد نیاز |
عنصر <AssignTo>
متغیر هدف را برای تنظیم با مقدار رمزگذاری شده یا رمزگشایی شده ایجاد شده توسط این خط مشی مشخص می کند.
مثال زیر نشان می دهد که این خط مشی باید سرصفحه Authorization
پیام را روی مقدار تولید شده تنظیم کند:
<AssignTo createNew="false">request.header.Authorization</AssignTo>
پیش فرض: | N/A |
حضور: | مورد نیاز |
نوع: | رشته |
صفات
صفت | توضیحات | پیش فرض | حضور |
---|---|---|---|
ایجاد جدید | تعیین می کند که اگر متغیر از قبل تنظیم شده باشد، خط مشی باید متغیر را بازنویسی کند یا خیر. وقتی "نادرست" است، انتساب به متغیر تنها در صورتی اتفاق می افتد که متغیر در حال حاضر تنظیم نشده باشد (تهی). وقتی "درست" باشد، انتساب به متغیر همیشه اتفاق می افتد. شما معمولاً این ویژگی را روی "false" (پیش فرض) تنظیم می کنید. | نادرست | اختیاری |
عنصر <منبع>
برای رمزگشایی، متغیر حاوی رشته کدگذاری شده Base64، به شکل Basic
Base64EncodedString
. برای مثال، request.header.Authorization
که مربوط به هدر Authorization است، مشخص کنید.
<Source>request.header.Authorization</Source>
پیش فرض: | N/A |
حضور: | برای عملیات رمزگشایی مورد نیاز است. |
نوع: | N/A |
متغیرهای جریان
متغیر جریان زیر در صورت شکست خط مشی تنظیم می شود:
-
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>