أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى
مستندات Apigee X. info
الأدوات المستخدمة
تعرض هذه السياسة سمات رموز الدخول ورموز التحديث ورموز التفويض وسمات تطبيق العميل، وتملأ المتغيرات بقيم هذه السمات.
تكون هذه السياسة مفيدة عندما تحتاج إلى ضبط سلوك ديناميكي مشروط استنادًا إلى قيمة في رمز مميّز أو رمز مصادقة. عندما يتم التحقّق من صحة الرمز المميّز، تتم تعبئة المتغيّرات تلقائيًا بقيم سمات الرمز المميّز. ومع ذلك، في الحالات التي لم يتم فيها التحقّق من صحة الرمز المميّز، يمكنك استخدام هذه الميزة لتعبئة المتغيّرات بشكل صريح بقيم سمات الرمز المميّز. راجِع أيضًا تخصيص الرموز المميّزة ورموز التفويض.
يجب أن يكون رمز الدخول الذي ترسله إلى هذه السياسة صالحًا، وإلا ستعرض السياسة الخطأ invalid_access_token.
نماذج
تستخدِم النماذج التالية سياسة Get OAuth V2 Info لاسترداد معلومات حول مكوّنات مختلفة من سير عمل OAuth2، ثم الوصول إلى هذه المعلومات ضمن الرمز.
رمز الدخول
للحصول على مرجع إلى رمز دخول، استخدِم العنصر <AccessToken> في سياستك.
يتوقّع المثال التالي العثور على رمز الدخول في مَعلمة طلب بحث باسم "access_token" (تعتمد تفاصيل التنفيذ الفعلية عليك):
<GetOAuthV2Info name="MyTokenAttrsPolicy"> <AccessToken ref="request.queryparam.access_token"></AccessToken> </GetOAuthV2Info>
وباستخدام رمز الدخول المميز، تبحث السياسة عن الملف الشخصي المرتبط بالرمز المميز وتملأ مجموعة من المتغيرات ببيانات الملف الشخصي.
يمكنك بعد ذلك الوصول إلى المتغيّرات باستخدام JavaScript أو وسيلة أخرى. يوضّح المثال التالي كيفية استرداد النطاقات المرتبطة برمز الدخول باستخدام JavaScript:
var scope = context.getVariable('oauthv2accesstoken.MyTokenAttrsPolicy.scope');
يُرجى العِلم أنّه للوصول إلى هذه المتغيّرات في الرمز، يجب أن تسبقها بالعبارة "oauthv2accesstoken". للاطّلاع على قائمة كاملة بالمتغيرات المتاحة من خلال رمز الدخول، يُرجى الرجوع إلى متغيرات رمز الدخول.
رمز المصادقة
للحصول على سمات رمز التفويض، استخدِم العنصر <AuthorizationCode>
في سياستك.
يتوقّع المثال التالي العثور على رمز الدخول في مَعلمة نموذجية باسم "الرمز" (تعتمد تفاصيل التنفيذ الفعلية عليك):
<GetOAuthV2Info name="MyAuthCodeAttrsPolicy"> <AuthorizationCode ref="request.formparam.code"></AuthorizationCode> </GetOAuthV2Info>
وباستخدام رمز التفويض، تبحث السياسة عن معلومات الرمز وتعبّئ مجموعة من المتغيّرات ببيانات رمز التفويض.
يمكنك بعد ذلك الوصول إلى المتغيّرات باستخدام JavaScript أو وسيلة أخرى. يسترد المثال التالي سمة مخصّصة مرتبطة برمز التفويض باستخدام JavaScript:
var attr = context.getVariable(‘oauthv2authcode.MyAuthCodeAttrsPolicy.custom_attribute_name’);
يُرجى العِلم أنّه للوصول إلى هذه المتغيّرات في الرمز، يجب أن تسبقها بـ "oauthv2authcode". للاطّلاع على قائمة كاملة بالمتغيرات المتاحة من خلال رمز التفويض، يُرجى الرجوع إلى متغيرات رمز التفويض.
الرمز المميز لإعادة التحميل
للحصول على سمات الرمز المميز لإعادة التحميل، استخدِم العنصر <RefreshToken> في سياستك.
يتوقّع المثال التالي العثور على رمز الدخول في مَعلمة طلب بحث باسم "refresh_token" (تعتمد تفاصيل التنفيذ الفعلية عليك):
<GetOAuthV2Info name="MyRefreshTokenAttrsPolicy"> <RefreshToken ref="request.queryparam.refresh_token"/> </GetOAuthV2Info>
بالنظر إلى رمز إعادة التحميل، تبحث السياسة عن معلومات رمز إعادة التحميل وتملأ مجموعة من المتغيرات ببيانات رمز إعادة التحميل.
يمكنك بعد ذلك الوصول إلى هذه المتغيّرات باستخدام JavaScript أو وسيلة أخرى. يسترد المثال التالي سمة مخصّصة مرتبطة برمز الدخول المميز باستخدام JavaScript:
var attr = context.getVariable(‘oauthv2refreshtoken.MyRefreshTokenAttrsPolicy.accesstoken.custom_attribute_name’);
يُرجى العِلم أنّه للوصول إلى المتغيّرات في الرمز، يجب أن تسبقها بالعبارة "oauthv2refreshtoken". للاطّلاع على القائمة الكاملة بالمتغيرات المتاحة من خلال رمز إعادة التحميل، يُرجى الاطّلاع على متغيرات رمز إعادة التحميل.
ثابت
في بعض الحالات النادرة، قد تحتاج إلى الحصول على الملف الشخصي لرمز مميّز تم ضبطه بشكل ثابت (أي رمز مميّز لا يمكن الوصول إليه من خلال متغيّر). يمكنك إجراء ذلك من خلال تقديم قيمة رمز الدخول كعنصر.
<GetOAuthV2Info name="GetTokenAttributes"> <AccessToken>shTUmeI1geSKin0TODcGLXBNe9vp</AccessToken> </GetOAuthV2Info>
يمكنك إجراء ذلك مع جميع أنواع الرموز المميزة الأخرى (معرّف العميل ورمز التفويض ورموز التحديث) أيضًا.
معرِّف العميل
يوضّح هذا المثال كيفية استرداد معلومات عن تطبيق العميل باستخدام معرّف العميل.
عند التنفيذ، تملأ السياسة مجموعة من المتغيّرات بمعلومات العميل. في هذه الحالة، تتوقّع السياسة العثور على معرّف العميل في مَعلمة طلب بحث باسم client_id. وباستخدام معرّف العميل، تبحث السياسة عن الملف الشخصي للعميل وتملأ مجموعة من المتغيّرات ببيانات الملف الشخصي. سيتم إضافة البادئة oauthv2client. إلى المتغيرات
<GetOAuthV2Info name="GetClientAttributes"> <ClientId ref="request.queryparam.client_id"></ClientId> </GetOAuthV2Info>
يمكنك بعد ذلك الوصول إلى المتغيّرات باستخدام JavaScript أو وسيلة أخرى. على سبيل المثال، للحصول على اسم تطبيق المطوّر والبريد الإلكتروني الخاص بالمطوّر والمرتبطين بتطبيق العميل باستخدام JavaScript، يمكنك اتّباع الخطوات التالية:
context.getVariable("oauthv2client.GetClientAttributes.developer.email");
context.getVariable("oauthv2client.GetClientAttributes.developer.app.name");مرجع العنصر
يصف مرجع العنصر عناصر وسمات سياسة GetOAuthV2Info.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <GetOAuthV2Info async="false" continueOnError="false" enabled="true" name="GetOAuthV2Info-1" <DisplayName>Get OAuth v2.0 Info 1</DisplayName> <AccessToken ref="variable"></AccessToken> <AuthorizationCode ref="variable"></AuthorizationCode> <ClientId ref="variable"></ClientId> <RefreshToken ref="variable"></RefreshToken> </GetOAuthV2Info>
سمات <GetOAuthV2Info>
<GetOAuthV2Info async="false" continueOnError="false" enabled="true" name="Get-OAuth-v20-Info-1">
يصف الجدول التالي السمات المشتركة بين جميع العناصر الرئيسية للسياسة:
| السمة | الوصف | تلقائي | التواجد في المنزل |
|---|---|---|---|
name |
الاسم الداخلي للسياسة. يمكن لقيمة السمة يمكنك، إذا أردت، استخدام العنصر |
لا ينطبق | مطلوب |
continueOnError |
اضبط القيمة على يمكنك ضبط القيمة على |
خطأ | اختياري |
enabled |
اضبط القيمة على اضبط القيمة على |
صحيح | اختياري |
async |
تم إيقاف هذه السمة نهائيًا. |
خطأ | منهي العمل به |
<DisplayName> عنصر
استخدِمه مع السمة name لتصنيف السياسة في
إدارة خادم وكيل لواجهة المستخدم باسم مختلف بلغة طبيعية.
<DisplayName>Policy Display Name</DisplayName>
| تلقائي |
لا ينطبق إذا لم تستخدم هذا العنصر، سيتم ضبط قيمة السمة |
|---|---|
| التواجد في المنزل | اختياري |
| النوع | سلسلة |
العنصر <AccessToken>
يستردّ هذا الإجراء الملف الشخصي لرمز دخول. يمكنك إدخال متغيّر يحتوي على سلسلة رمز الدخول أو سلسلة رمز حرفية (حالة نادرة). في هذا المثال، يتم استرداد رمز الدخول من مَعلمة طلب بحث تم تمريرها في طلب. استخدِم العنصر <IgnoreAccessTokenStatus> إذا أردت عرض معلومات عن رمز مميّز تم إبطاله أو انتهت صلاحيته.
<AccessToken ref="request.queryparam.access_token"></AccessToken>
|
القيمة التلقائية: |
request.formparam.access_token (a x-www-form-urlencoded and specified in the request body) |
|
الظهور: |
اختياري |
| النوع: | سلسلة |
| القيم الصالحة: |
إما متغيّر تدفق يحتوي على سلسلة رمز مميّز للوصول، أو سلسلة حرفية. |
العنصر <AuthorizationCode>
يسترد هذا الإجراء الملف الشخصي لرمز تفويض. يمكنك إدخال متغيّر يحتوي على سلسلة رمز التفويض أو سلسلة رمز حرفية (حالة نادرة). في هذا المثال، يتم استرداد رمز المصادقة من مَعلمة طلب البحث التي تم تمريرها في الطلب. للاطّلاع على قائمة بالمتغيرات التي يتم ملؤها من خلال هذه العملية، راجِع متغيرات التدفق.
<AuthorizationCode ref="request.queryparam.authorization_code"></AuthorizationCode>
|
القيمة التلقائية: |
request.formparam.access_token (a x-www-form-urlencoded and specified in the request body) |
|
الظهور: |
اختياري |
| النوع: | سلسلة |
| القيم الصالحة: |
إما متغيّر مسار يحتوي على سلسلة رمز مصادقة أو سلسلة حرفية. |
العنصر <ClientId>
تُستخدَم لاسترداد معلومات مرتبطة برقم تعريف العميل. في هذا المثال، يتم استرداد رقم تعريف العميل من مَعلمة طلب بحث تم تمريرها في طلب. للاطّلاع على قائمة بالمتغيرات التي تتم تعبئتها من خلال هذه العملية، راجِع متغيرات التدفق.
<ClientId ref="request.queryparam.client_id"></ClientId>|
القيمة التلقائية: |
request.formparam.access_token (a x-www-form-urlencoded and specified in the request body) |
|
الظهور: |
اختياري |
| النوع: | سلسلة |
| القيم الصالحة: | إما متغيّر مسار يحتوي على سلسلة رمز مصادقة أو سلسلة حرفية. |
عنصر <IgnoreAccessTokenStatus>
تعرِض هذه السمة معلومات الرمز المميّز حتى إذا انتهت صلاحيته أو تم إبطاله. لا يمكن استخدام هذا العنصر إلا مع رموز الدخول. يتم عرض معلومات الكيانات الأخرى، مثل رموز التحديث ورموز التفويض، بغض النظر عن حالتها، وذلك بشكل تلقائي.
<IgnoreAccessTokenStatus>true</IgnoreAccessTokenStatus>
|
القيمة التلقائية: |
خطأ |
|
الظهور: |
اختياري |
| النوع: | قيمة منطقية |
| القيم الصالحة: | صواب أم خطأ |
العنصر <RefreshToken>
يستردّ هذا الإجراء الملف الشخصي لرمز مميّز لإعادة التحميل. يمكنك إدخال متغيّر يحتوي على سلسلة الرمز المميز لإعادة التحميل أو سلسلة رمز مميز حرفية (حالة نادرة). في هذا المثال، يتم استرداد الرمز المميز لإعادة التحميل من مَعلمة طلب بحث تم تمريرها في طلب. للاطّلاع على قائمة بالمتغيرات التي يتم ملؤها من خلال هذه العملية، راجِع متغيرات التدفق.
<RefreshToken ref="request.queryparam.refresh_token"></RefreshToken>
|
القيمة التلقائية: |
request.formparam.access_token (a x-www-form-urlencoded and specified in the request body) |
|
الظهور: |
اختياري |
| النوع: | سلسلة |
| القيم الصالحة: |
إما متغيّر تدفق يحتوي على سلسلة رمز مميز لإعادة التحميل، أو سلسلة حرفية. |
متغيّرات التدفق
تعبئ سياسة GetOAuthV2Info هذه المتغيرات، ويتم استخدامها عادةً في الحالات التي تحتاج فيها إلى بيانات الملف الشخصي، ولكن لم يتم منح إذن أو إجراء عملية التحقّق بعد. .
متغيّرات معرّف العميل
تتم تعبئة هذه المتغيرات عند ضبط العنصر ClientId:
oauthv2client.{policy_name}.client_id
oauthv2client.{policy_name}.client_secret
oauthv2client.{policy_name}.redirection_uris // Note the spelling -- 'redirection_uris'
oauthv2client.{policy_name}.developer.email
oauthv2client.{policy_name}.developer.app.name
oauthv2client.{policy_name}.developer.id
oauthv2client.{policy_name}.{developer_app_custom_attribute_name}متغيّرات رمز الدخول
يتم ملء هذه المتغيرات عند ضبط العنصر AccessToken:
oauthv2accesstoken.{policy_name}.developer.id oauthv2accesstoken.{policy_name}.developer.app.name oauthv2accesstoken.{policy_name}.developer.app.id oauthv2accesstoken.{policy_name}.developer.email oauthv2accesstoken.{policy_name}.organization_name oauthv2accesstoken.{policy_name}.api_product_list oauthv2accesstoken.{policy_name}.access_token oauthv2accesstoken.{policy_name}.scope oauthv2accesstoken.{policy_name}.expires_in //in seconds oauthv2accesstoken.{policy_name}.status oauthv2accesstoken.{policy_name}.client_id oauthv2accesstoken.{policy_name}.accesstoken.{custom_attribute_name} oauthv2accesstoken.{policy_name}.refresh_token oauthv2accesstoken.{policy_name}.refresh_token_status oauthv2accesstoken.{policy_name}.refresh_token_expires_in //in seconds oauthv2accesstoken.{policy_name}.refresh_count oauthv2accesstoken.{policy_name}.refresh_token_issued_at oauthv2accesstoken.{policy_name}.revoke_reason //Apigee hybrid only with value of REVOKED_BY_APP, REVOKED_BY_ENDUSER, REVOKED_BY_APP_ENDUSER, or TOKEN_REVOKED
متغيّرات رمز التفويض
يتم ملء هذه المتغيّرات عند ضبط العنصر AuthorizationCode:
oauthv2authcode.{policy_name}.code
oauthv2authcode.{policy_name}.scope
oauthv2authcode.{policy_name}.redirect_uri
oauthv2authcode.{policy_name}.client_id
oauthv2authcode.{policy_name}.{auth_code_custom_attribute_name}متغيرات الرمز المميز لإعادة التحميل
يتم ملء هذه المتغيّرات عند ضبط العنصر RefreshToken:
oauthv2refreshtoken.{policy_name}.developer.id oauthv2refreshtoken.{policy_name}.developer.app.name oauthv2refreshtoken.{policy_name}.developer.app.id oauthv2refreshtoken.{policy_name}.developer.email oauthv2refreshtoken.{policy_name}.organization_name oauthv2refreshtoken.{policy_name}.api_product_list oauthv2refreshtoken.{policy_name}.access_token oauthv2refreshtoken.{policy_name}.scope oauthv2refreshtoken.{policy_name}.expires_in //in seconds oauthv2refreshtoken.{policy_name}.status oauthv2refreshtoken.{policy_name}.client_id oauthv2refreshtoken.{policy_name}.accesstoken.{custom_attribute_name} oauthv2refreshtoken.{policy_name}.refresh_token oauthv2refreshtoken.{policy_name}.refresh_token_status oauthv2refreshtoken.{policy_name}.refresh_token_expires_in //in seconds oauthv2refreshtoken.{policy_name}.refresh_count oauthv2refreshtoken.{policy_name}.refresh_token_issued_at oauthv2refreshtoken.{policy_name}.revoke_reason //Apigee hybrid only with value of REVOKED_BY_APP, REVOKED_BY_ENDUSER, REVOKED_BY_APP_ENDUSER, or TOKEN_REVOKED
المخطط
يتم تحديد كل نوع من أنواع السياسات من خلال مخطّط XML (.xsd). وللحصول على مرجع، تتوفّر مخطّطات السياسات على GitHub.
مرجع الخطأ
يصف هذا القسم رموز الخطأ ورسائل الخطأ التي يتم عرضها ومتغيرات الأخطاء التي تم ضبطها من خلال Edge عندما تؤدي هذه السياسة إلى ظهور خطأ. من المهم معرفة هذه المعلومات إذا كنت تضع قواعد خطأ التعامل مع الأخطاء. للحصول على مزيد من المعلومات، يمكنك الاطّلاع على ما تحتاج إلى معرفته حول أخطاء السياسة والتعامل مع المعالجة والأخطاء.
أخطاء بيئة التشغيل
يمكن أن تحدث هذه الأخطاء عند تنفيذ السياسة. أسماء الخطأ الموضحة أدناه هي السلاسل
التي يتم تخصيصها للمتغيّر fault.name عند حدوث خطأ. مشاهدة الخطأ
قسم "المتغيرات" أدناه لمزيد من التفاصيل.
| رمز الخطأ | رموز حالة HTTP | السبب |
|---|---|---|
steps.oauth.v2.access_token_expired |
500 | انتهت صلاحية رمز الدخول الذي تم إرساله إلى السياسة. |
steps.oauth.v2.authorization_code_expired |
500 | انتهت صلاحية رمز التفويض الذي تم إرساله إلى السياسة. |
steps.oauth.v2.invalid_access_token |
500 | رمز الدخول الذي تم إرساله إلى السياسة غير صالح. |
steps.oauth.v2.invalid_client-invalid_client_id |
500 | معرّف العميل الذي تم إرساله إلى السياسة غير صالح. |
steps.oauth.v2.invalid_refresh_token |
500 | الرمز المميّز لإعادة التحميل الذي تم إرساله إلى السياسة غير صالح. |
steps.oauth.v2.invalid_request-authorization_code_invalid |
500 | رمز التفويض الذي تم إرساله إلى السياسة غير صالح. |
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound |
401 | يُرجى مراجعة هذه المشاركة في منتدى Apigee للحصول على معلومات حول تحديد هذا الخطأ وحلّها. |
steps.oauth.v2.refresh_token_expired |
500 | انتهت صلاحية الرمز المميّز لإعادة التحميل الذي تم إرساله إلى السياسة. |
أخطاء النشر
يمكنك الرجوع إلى الرسالة التي تم الإبلاغ عنها في واجهة المستخدم للحصول على معلومات عن أخطاء النشر.
متغيّرات الأخطاء
يتم ضبط هذه المتغيّرات عندما تؤدي هذه السياسة إلى ظهور خطأ في وقت التشغيل.
| المتغيرات | المكان | مثال |
|---|---|---|
fault.name="fault_name" |
fault_name هو اسم الخطأ، كما هو موضَّح في جدول أخطاء وقت التشغيل أعلاه. اسم الخطأ هو الجزء الأخير من رمز الخطأ. | fault.name Matches "IPDeniedAccess" |
oauthV2.policy_name.failed |
policy_name هو الاسم الذي يحدّده المستخدم للسياسة التي أدّت إلى حدوث الخطأ. | oauthV2.GetTokenInfo.failed = true |
oauthV2.policy_name.fault.name |
policy_name هو الاسم الذي يحدّده المستخدم للسياسة التي أدّت إلى حدوث الخطأ. | oauthV2.GetToKenInfo.fault.name = invalid_client-invalid_client_id |
oauthV2.policy_name.fault.cause |
policy_name هو الاسم الذي يحدّده المستخدم للسياسة التي أدّت إلى حدوث الخطأ. | oauthV2.GetTokenInfo.cause = ClientID is Invalid |
مثال على استجابة الخطأ
{ "fault":{ "faultstring":"ClientId is Invalid", "detail":{ "errorcode":"keymanagement.service.invalid_client-invalid_client_id" } } }
مثال على قاعدة الخطأ
<FaultRule name="OAuthV2 Faults">
<Step>
<Name>AM-InvalidClientIdResponse</Name>
</Step>
<Condition>(fault.name = "invalid_client-invalid_client_id")</Condition>
</FaultRule>