أنت الآن بصدد الاطّلاع على مستندات 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">
The following table describes attributes that are common to all policy parent elements:
| Attribute | Description | Default | Presence |
|---|---|---|---|
name |
The internal name of the policy. The value of the Optionally, use the |
N/A | Required |
continueOnError |
Set to Set to |
false | Optional |
enabled |
Set to Set to |
true | Optional |
async |
This attribute is deprecated. |
false | Deprecated |
<DisplayName> element
Use in addition to the name attribute to label the policy in the
management UI proxy editor with a different, natural-language name.
<DisplayName>Policy Display Name</DisplayName>
| Default |
N/A If you omit this element, the value of the policy's |
|---|---|
| Presence | Optional |
| Type | String |
العنصر <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.
مرجع الخطأ
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 faults. 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. The error names shown below are the strings
that are assigned to the fault.name variable when an error occurs. See the Fault
variables section below for more details.
| Fault code | HTTP status | Cause |
|---|---|---|
steps.oauth.v2.access_token_expired |
500 | The access token sent to the policy is expired. |
steps.oauth.v2.authorization_code_expired |
500 | The authorization code sent to the policy is expired. |
steps.oauth.v2.invalid_access_token |
500 | The access token sent to the policy is invalid. |
steps.oauth.v2.invalid_client-invalid_client_id |
500 | The client ID sent to the policy is invalid. |
steps.oauth.v2.invalid_refresh_token |
500 | The refresh token sent to the policy is invalid. |
steps.oauth.v2.invalid_request-authorization_code_invalid |
500 | The authorization code sent to the policy is invalid. |
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound |
401 | Please see this Apigee Community post for information about troubleshooting this error. |
steps.oauth.v2.refresh_token_expired |
500 | The refresh token sent to the policy is expired. |
Deployment errors
Refer to the message reported in the UI for information about deployment errors.
Fault variables
These variables are set when this policy triggers an error at runtime.
| 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 "IPDeniedAccess" |
oauthV2.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GetTokenInfo.failed = true |
oauthV2.policy_name.fault.name |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GetToKenInfo.fault.name = invalid_client-invalid_client_id |
oauthV2.policy_name.fault.cause |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GetTokenInfo.cause = ClientID is Invalid |
Example error response
{ "fault":{ "faultstring":"ClientId is Invalid", "detail":{ "errorcode":"keymanagement.service.invalid_client-invalid_client_id" } } }
Example fault rule
<FaultRule name="OAuthV2 Faults">
<Step>
<Name>AM-InvalidClientIdResponse</Name>
</Step>
<Condition>(fault.name = "invalid_client-invalid_client_id")</Condition>
</FaultRule>