شما در حال مشاهده اسناد 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)
مرجع خطا
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>