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