أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى
مستندات Apigee X. info
الأدوات المستخدمة
OAuthV2 هي سياسة متعدّدة الأوجه لتنفيذ عمليات نوع منح OAuth 2.0. هذه هي السياسة الأساسية المستخدَمة لضبط نقاط نهاية OAuth 2.0 على Apigee Edge.
ملاحظة: إذا أردت معرفة المزيد عن بروتوكول OAuth على Apigee Edge، يمكنك الاطّلاع على الصفحة الرئيسية لبروتوكول OAuth. ويوفّر روابط إلى المراجع والنماذج والفيديوهات وغير ذلك. يمكنك الاطّلاع على نموذج OAuth المتقدّم على GitHub للحصول على عرض توضيحي جيد حول كيفية استخدام هذه السياسة في تطبيق عملي.
العيّنات
VerifyAccessToken
VerifyAccessToken
يتحقّق إعداد سياسة OAuthV2 هذا (باستخدام عملية VerifyAccessToken) من أنّ رمز الدخول الذي تم إرساله إلى Apigee Edge صالح. عندما يتم تشغيل عملية هذه السياسة، يبحث Edge عن رمز مميّز صالح للوصول في الطلب. إذا كان رمز الدخول صالحًا، يُسمح بتنفيذ الطلب. إذا كانت غير صالحة، يتم إيقاف جميع عمليات المعالجة ويتم عرض رسالة خطأ في الرد.
<OAuthV2 async="false" continueOnError="false" enabled="true" name="OAuth-v20-2">
<DisplayName>OAuth v2.0 2</DisplayName>
<Operation>VerifyAccessToken</Operation>
<AccessTokenPrefix>Bearer</AccessTokenPrefix> <!-- Optional, default is Bearer -->
</OAuthV2>ملاحظة: لا تتوافق سوى رموز OAuth 2.0 المميزة لحاملها. لا تتوافق الرموز المميزة لرمز مصادقة الرسائل (MAC).
على سبيل المثال:
$ curl -H "Authorization: Bearer ylSkZIjbdWybfsUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282
يقبل Edge تلقائيًا رموز الدخول في العنوان Authorization مع البادئة Bearer. يمكنك تغيير هذا الإعداد التلقائي باستخدام العنصر <AccessToken>.
GenerateAccessToken
إنشاء رموز الدخول
للاطّلاع على أمثلة توضّح كيفية طلب رموز الدخول لكل نوع من أنواع منح الأذونات المتوافقة، راجِع مقالة طلب رموز الدخول ورموز التفويض. يتضمّن الموضوع أمثلة على هذه العمليات:
GenerateAuthorizationCode
إنشاء رمز تفويض
للاطّلاع على أمثلة توضّح كيفية طلب رموز التفويض، يُرجى الاطّلاع على طلب رمز تفويض.
RefreshAccessToken
إعادة تحميل رمز دخول
للاطّلاع على أمثلة توضّح كيفية طلب رموز دخول باستخدام رمز مميز لإعادة التحميل، يُرجى الاطّلاع على إعادة تحميل رمز دخول.
الرمز المميز لتدفق الرد
إنشاء رمز دخول في مسار الرد
في بعض الأحيان، قد تحتاج إلى إنشاء رمز دخول في مسار الرد. على سبيل المثال، يمكنك إجراء ذلك استجابةً لعملية تحقّق مخصّصة تم إجراؤها في إحدى الخدمات الخلفية. في هذا المثال، تتطلّب حالة الاستخدام كلاً من رمز الدخول المميز ورمز إعادة التحميل، ما يستبعد نوع منح الإذن الضمني. في هذه الحالة، سنستخدم نوع منح الإذن بكلمة المرور لإنشاء الرمز المميّز. كما سترى، يكمن الحلّ في تمرير عنوان طلب التفويض مع سياسة JavaScript.
أولاً، لنلقِ نظرة على نموذج السياسة:
<OAuthV2 enabled="true" continueOnError="false" async="false" name="generateAccessToken"> <Operation>GenerateAccessToken</Operation> <AppEndUser>Doe</AppEndUser> <UserName>jdoe</UserName> <PassWord>jdoe</PassWord> <GrantType>grant_type</GrantType> <ClientId>a_valid_client_id</ClientId> <SupportedGrantTypes> <GrantType>password</GrantType> </SupportedGrantTypes> </OAuthV2>
إذا وضعت هذه السياسة في مسار الرد، ستتعذّر العملية بسبب ظهور الخطأ 401 UnAuthorized حتى إذا تم تحديد مَعلمات تسجيل الدخول الصحيحة في السياسة. لحلّ هذه المشكلة، عليك ضبط عنوان طلب التفويض.
يجب أن يحتوي عنوان Authorization على مخطط وصول أساسي مع client_id:client_secret بترميز Base64.
يمكنك إضافة هذا العنوان باستخدام سياسة JavaScript يتم وضعها قبل سياسة OAuthV2 مباشرةً، على النحو التالي. يجب ضبط المتغيّرَين "local_clientid" و "local_secret" مسبقًا وتوفيرهما في مسار العمل:
var client_id = context.getVariable("local_clientid"); var client_secret = context.getVariable("local_secret"); context.setVariable("request.header.Authorization","Basic "+CryptoJS.enc.Base64.stringify(CryptoJS.enc.Latin1 .parse(client_id + ':' + client_secret)));
راجِع أيضًا ترميز بيانات اعتماد المصادقة الأساسية.
مرجع العنصر
يصف مرجع السياسة عناصر وسمات سياسة OAuthV2.
سياسة النموذج الموضّحة أدناه هي أحد الإعدادات المحتملة العديدة. يوضّح هذا النموذج سياسة OAuthV2 تم إعدادها لعملية GenerateAccessToken. ويتضمّن عناصر مطلوبة واختيارية. يُرجى الرجوع إلى أوصاف العناصر في هذا القسم لمعرفة التفاصيل.
<OAuthV2 name="GenerateAccessToken"> <!-- This policy generates an OAuth 2.0 access token using the client_credentials grant type --> <Operation>GenerateAccessToken</Operation> <!-- This is in millseconds, so expire in an hour --> <ExpiresIn>3600000</ExpiresIn> <SupportedGrantTypes> <GrantType>client_credentials</GrantType> </SupportedGrantTypes> <GrantType>request.queryparam.grant_type</GrantType> <GenerateResponse/> </OAuthV2>
سمات <OAuthV2>
<OAuthV2 async="false" continueOnError="false" enabled="true" name="MyOAuthPolicy">
يصف الجدول التالي السمات المشتركة بين جميع العناصر الرئيسية للسياسة:
| السمة | الوصف | تلقائي | التواجد في المنزل |
|---|---|---|---|
name |
الاسم الداخلي للسياسة. يمكن لقيمة السمة يمكنك، إذا أردت، استخدام العنصر |
لا ينطبق | مطلوب |
continueOnError |
اضبط القيمة على يمكنك ضبط القيمة على |
خطأ | اختياري |
enabled |
اضبط القيمة على اضبط القيمة على |
صحيح | اختياري |
async |
تم إيقاف هذه السمة نهائيًا. |
خطأ | منهي العمل به |
<DisplayName> عنصر
استخدِمه مع السمة name لتصنيف السياسة في
إدارة خادم وكيل لواجهة المستخدم باسم مختلف بلغة طبيعية.
<DisplayName>Policy Display Name</DisplayName>
| تلقائي |
لا ينطبق إذا لم تستخدم هذا العنصر، سيتم ضبط قيمة السمة |
|---|---|
| التواجد في المنزل | اختياري |
| النوع | سلسلة |
العنصر <AccessToken>
<AccessToken>request.header.access_token</AccessToken>
تتوقّع الدالة VerifyAccessToken تلقائيًا إرسال رمز الدخول في العنوان Authorization.
يمكنك تغيير هذا الإعداد التلقائي باستخدام هذا العنصر. على سبيل المثال، يشير request.queryparam.access_token إلى أنّه يجب توفير رمز الدخول كمعلَمة طلب بحث باسم access_token.
<AccessToken>request.header.access_token</AccessToken>:
curl https://myorg-myenv.apigee.net/oauth2/validate -H "access_token:Rft3dqrs56Blirls56a"
<AccessToken>request.queryparam.access_token</AccessToken>:
curl "https://myorg-myenv.apigee.net/oauth2/validate?access_token:Rft3dqrs56Blirls56a"
|
القيمة التلقائية: |
لا ينطبق |
|
الظهور: |
اختياري |
| النوع: | سلسلة |
| يُستخدَم مع العمليات التالية: |
|
العنصر <AccessTokenPrefix>
<AccessTokenPrefix>Bearer</AccessTokenPrefix>
تتوقّع الدالة VerifyAccessToken تلقائيًا إرسال رمز الدخول في عنوان Authorization كرمز Bearer. على سبيل المثال:
-H "Authorization: Bearer Rft3dqrs56Blirls56a"
في الوقت الحالي، Bearer هو البادئة الوحيدة المتاحة.
|
القيمة التلقائية: |
الحامل |
|
الظهور: |
اختياري |
| النوع: | سلسلة |
| القيم الصالحة: |
الحامل |
| يُستخدَم مع العمليات التالية: |
|
عنصر <AppEndUser>
<AppEndUser>request.queryparam.app_enduser</AppEndUser>
في الحالات التي يجب فيها إرسال رقم تعريف المستخدم النهائي للتطبيق إلى خادم التفويض، يتيح لك هذا العنصر تحديد المكان الذي يجب أن يبحث فيه Edge عن رقم تعريف المستخدم النهائي. على سبيل المثال، يمكن إرسالها كمَعلمة طلب بحث أو في رأس HTTP.
على سبيل المثال، يشير request.queryparam.app_enduser إلى أنّه يجب توفير AppEndUser كمعلَمة طلب بحث، مثل ?app_enduser=ntesla@theramin.com. لطلب AppEndUser في عنوان HTTP، مثلاً، اضبط هذه القيمة على request.header.app_enduser.
يتيح لك توفير هذا الإعداد تضمين معرّف مستخدم نهائي للتطبيق في رمز الدخول. تكون هذه الميزة مفيدة إذا كنت تريد استرداد رموز الدخول المميزة لبروتوكول OAuth 2.0 أو إبطالها باستخدام معرّف المستخدم النهائي. لمزيد من المعلومات، يُرجى الاطّلاع على تفعيل استرداد رموز الدخول المميزة لبروتوكول OAuth 2.0 وإبطالها حسب معرّف المستخدم النهائي أو معرّف التطبيق أو كليهما.
|
القيمة التلقائية: |
لا ينطبق |
|
الظهور: |
اختياري |
| النوع: | سلسلة |
| القيم الصالحة: |
أي متغير تدفّق يمكن للسياسة الوصول إليه في وقت التشغيل |
| يُستخدَم مع أنواع الأذونات التالية: |
|
<Attributes/Attribute>
<Attributes> <Attribute name="attr_name1" ref="flow.variable" display="true|false">value1</Attribute> <Attribute name="attr_name2" ref="flow.variable" display="true|false">value2</Attribute> </Attributes>
استخدِم هذا العنصر لإضافة سمات مخصّصة إلى رمز الدخول أو رمز التفويض. على سبيل المثال، قد تحتاج إلى تضمين معرّف مستخدم أو معرّف جلسة في رمز دخول يمكن استخراجه والتحقّق منه في وقت التشغيل.
يتيح لك هذا العنصر تحديد قيمة في متغيّر تدفّق أو من سلسلة حرفية. إذا حدّدت متغيّرًا وسلسلة، سيتم استخدام القيمة المحدّدة في متغيّر التدفق. إذا تعذّر تحليل المتغيّر، سيتم استخدام السلسلة التلقائية.
لمزيد من المعلومات عن استخدام هذا العنصر، راجِع تخصيص الرموز المميّزة ورموز التفويض.
عرض السمات المخصّصة أو إخفاؤها في الرد
تذكَّر أنّه في حال ضبط عنصر GenerateResponse لهذه السياسة على true، سيتم عرض تمثيل JSON الكامل للرمز المميز في الردّ، بما في ذلك أي سمات مخصّصة تحدّدها. في بعض الحالات، قد تحتاج إلى إخفاء بعض سماتك المخصّصة أو جميعها في الردّ حتى لا تظهر لتطبيقات العميل.
تظهر السمات المخصّصة في الردّ تلقائيًا. إذا أردت إخفاءها، يمكنك ضبط المَعلمة display على false. على سبيل المثال:
<Attributes>
<Attribute name="employee_id" ref="employee.id" display="false"/>
<Attribute name="employee_name" ref="employee.name" display="false"/>
</Attributes>لا يتم الاحتفاظ بقيمة السمة display. لنفترض أنّك تنشئ رمز دخول يتضمّن سمات مخصّصة تريد إخفاءها في الردّ الذي تم إنشاؤه. يساعدك ضبط display=false في تحقيق هذا الهدف. ومع ذلك، إذا تم إنشاء رمز دخول جديد لاحقًا باستخدام رمز مميز لإعادة التحميل، ستظهر السمات المخصّصة الأصلية من رمز الدخول في استجابة الرمز المميز لإعادة التحميل. ويرجع ذلك إلى أنّ Edge لا يتذكّر أنّ السمة display تم ضبطها في الأصل على false في سياسة إنشاء رمز الدخول، بل إنّ السمة المخصّصة هي ببساطة جزء من البيانات الوصفية لرمز الدخول.
سيظهر السلوك نفسه إذا أضفت سمات مخصّصة إلى رمز تفويض، فعند إنشاء رمز مميّز للوصول باستخدام هذا الرمز، ستظهر هذه السمات المخصّصة في استجابة الرمز المميّز للوصول. مرّة أخرى، قد لا يكون هذا هو السلوك الذي تريده.
لإخفاء السمات المخصّصة في هذه الحالات، يمكنك اتّخاذ أحد الإجراءَين التاليَين:
- أعِد ضبط السمات المخصّصة بشكل صريح في سياسة الرمز المميز لإعادة التحميل واضبط عرضها على "خطأ". في هذه الحالة، قد تحتاج إلى استرداد القيم المخصّصة الأصلية من رمز الدخول الأصلي باستخدام سياسة GetOAuthV2Info.
- استخدِم سياسة JavaScript للمعالجة اللاحقة لاستخراج أي سمات مخصّصة لا تريد ظهورها في الردّ يدويًا.
راجِع أيضًا تخصيص الرموز المميّزة ورموز التفويض.
|
القيمة التلقائية: |
|
|
الظهور: |
اختياري |
| القيم الصالحة: |
|
| يُستخدَم مع أنواع الأذونات التالية: |
|
العنصر <ClientId>
<ClientId>request.formparam.client_id</ClientId>
في عدة حالات، يجب أن يرسل تطبيق العميل معرّف العميل إلى خادم التفويض. يحدّد هذا العنصر أنّ Apigee يجب أن يبحث عن معرّف العميل في متغيّر التدفق request.formparam.client_id. لا يمكن ضبط ClientId على أي متغيّر آخر.
راجِع أيضًا طلب رموز مميّزة للوصول ورموز تفويض.
|
القيمة التلقائية: |
request.formparam.client_id (a x-www-form-urlencoded and specified in the request body) |
|
الظهور: |
اختياري |
| النوع: | سلسلة |
| القيم الصالحة: | متغيّر التدفق: request.formparam.client_id |
| يُستخدَم مع أنواع الأذونات التالية: |
يمكن استخدامه أيضًا مع عملية GenerateAuthorizationCode. |
العنصر <Code>
<Code>request.queryparam.code</Code>
في مسار نوع إذن التفويض، يجب أن يرسل العميل رمز تفويض إلى خادم التفويض (Apigee Edge). يتيح لك هذا العنصر تحديد المكان الذي يجب أن يبحث فيه Edge عن رمز التفويض. على سبيل المثال، يمكن إرسالها كمعلَمة طلب بحث أو عنوان HTTP أو معلَمة نموذج (الإعداد التلقائي).
يشير المتغيّر request.queryparam.auth_code إلى أنّه يجب توفير رمز التفويض كمعلَمة طلب بحث، مثل ?auth_code=AfGlvs9. لطلب رمز التفويض في عنوان HTTP، مثلاً، اضبط هذه القيمة على request.header.auth_code. راجِع أيضًا
طلب رموز الدخول ورموز التفويض.
|
القيمة التلقائية: |
request.formparam.code (a x-www-form-urlencoded and specified in the request body) |
|
الظهور: |
اختياري |
| النوع: | سلسلة |
| القيم الصالحة: | أي متغيّر في التدفق يمكن للسياسة الوصول إليه في وقت التشغيل |
| يُستخدَم مع أنواع الأذونات التالية: | authorization_code |
عنصر <ExpiresIn>
<ExpiresIn>10000</ExpiresIn>
يفرض وقت انتهاء صلاحية رموز الدخول ورموز التفويض بالملّي ثانية. (بالنسبة إلى رموز التحديث، استخدِم <RefreshTokenExpiresIn>.) قيمة وقت انتهاء الصلاحية هي قيمة من إنشاء النظام بالإضافة إلى قيمة <ExpiresIn>. إذا تم ضبط
<ExpiresIn> على -1، تنتهي صلاحية الرمز المميز أو الرمز وفقًا لأقصى مدة انتهاء صلاحية لرمز الدخول عبر OAuth.
في حال عدم تحديد <ExpiresIn>، يطبّق النظام قيمة تلقائية تم ضبطها على مستوى النظام.
يمكن أيضًا ضبط وقت انتهاء الصلاحية في وقت التشغيل باستخدام قيمة تلقائية مبرمَجة أو من خلال الإشارة إلى متغيّر تدفّق. على سبيل المثال، يمكنك تخزين قيمة انتهاء صلاحية الرمز المميّز في خريطة قيم مفاتيح، واستردادها، وتعيينها لمتغيّر، والإشارة إليها في السياسة. على سبيل المثال:
kvm.oauth.expires_in.
باستخدام Apigee Edge للسحابة الإلكترونية العامة، يحتفظ Edge بالكيانات التالية في ذاكرة التخزين المؤقت لمدة 180 ثانية على الأقل بعد الوصول إلى الكيانات.
- رموز الدخول عبر OAuth وهذا يعني أنّه قد ينجح استخدام رمز مميّز تم إبطاله لمدة تصل إلى ثلاث دقائق، إلى أن تنتهي مدة صلاحية الحد الأقصى لذاكرته المؤقتة.
- كيانات خدمة إدارة المفاتيح (KMS) (التطبيقات والمطوّرون ومنتجات واجهة برمجة التطبيقات)
- سمات مخصّصة لرموز OAuth المميزة وعناصر KMS
يحدّد المقطع التالي متغيّر تدفّق وقيمة تلقائية أيضًا. يُرجى العِلم أنّ قيمة المتغيّر في التدفق لها الأولوية على القيمة التلقائية المحدّدة.
<ExpiresIn ref="kvm.oauth.expires_in">
3600000 <!--default value in milliseconds-->
</ExpiresIn>لا يتيح Edge طريقة لفرض انتهاء صلاحية الرمز المميز بعد إنشائه. إذا كنت بحاجة إلى فرض انتهاء صلاحية الرمز المميّز (على سبيل المثال، استنادًا إلى شرط معيّن)، يمكنك الاطّلاع على حلّ محتمل في منشور "منتدى Apigee" هذا.
يتم تلقائيًا إزالة رموز الدخول المميزة المنتهية الصلاحية من نظام Apigee Edge بعد 3 أيام من انتهاء صلاحيتها. اطّلِع أيضًا على إبطال رموز الدخول.
السحابة الإلكترونية الخاصة: عند تثبيت Edge for Private Cloud، يتم ضبط القيمة التلقائية من خلال السمة conf_keymanagement_oauth_auth_code_expiry_time_in_millis.
لضبط هذه السمة، اتّبِع الخطوات التالية:
- افتح ملف
message-processor.propertiesفي محرِّر. إذا لم يكن الملف متوفّرًا، أنشِئه باتّباع الخطوات التالية:vi /opt/apigee/customer/application/message-processor.properties
- اضبط السمة على النحو المطلوب:
conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
- تأكَّد من أنّ ملف الخصائص يملكه المستخدم "apigee":
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- أعِد تشغيل "معالج الرسائل".
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
|
القيمة التلقائية: |
في حال عدم تحديدها، يطبّق النظام قيمة تلقائية تم ضبطها على مستوى النظام. |
|
الظهور: |
اختياري |
| النوع: | عدد صحيح |
| القيم الصالحة: |
|
| يُستخدَم مع أنواع الأذونات التالية: |
يُستخدَم أيضًا مع عملية GenerateAuthorizationCode. |
العنصر <ExternalAccessToken>
<ExternalAccessToken>request.queryparam.external_access_token</ExternalAccessToken>
تُعلم هذه السمة Apigee Edge بمكان العثور على رمز دخول خارجي (أي رمز دخول لم يتم إنشاؤه بواسطة Apigee Edge).
يشير المتغيّر request.queryparam.external_access_token إلى أنّه يجب توفير رمز الدخول الخارجي كمعلَمة طلب بحث، مثل ?external_access_token=12345678. لطلب رمز الدخول الخارجي في عنوان HTTP، مثلاً، اضبط هذه القيمة على request.header.external_access_token. يُرجى الاطّلاع أيضًا على استخدام الرموز المميزة لبروتوكول OAuth التابع لجهات خارجية.
العنصر <ExternalAuthorization>
<ExternalAuthorization>true</ExternalAuthorization>
إذا كانت قيمة هذا العنصر هي false أو لم يكن العنصر متوفّرًا، يتحقّق Edge من صحة client_id وclient_secret بشكل عادي من خلال مخزن تفويض Apigee Edge. استخدِم هذا العنصر عندما تريد العمل مع رموز OAuth المميزة التابعة لجهات خارجية. للحصول على تفاصيل حول استخدام هذا العنصر، يُرجى الاطّلاع على استخدام الرموز المميزة لبروتوكول OAuth التابعة لجهات خارجية.
|
القيمة التلقائية: |
خطأ |
|
الظهور: |
اختياري |
| النوع: | منطقي |
| القيم الصالحة: | صواب أم خطأ |
| يُستخدَم مع أنواع الأذونات التالية: |
|
العنصر <ExternalAuthorizationCode>
<ExternalAuthorizationCode>request.queryparam.external_auth_code</ExternalAuthorizationCode>
تحدّد هذه السمة المكان الذي يمكن فيه العثور على رمز مصادقة خارجي (أي رمز مصادقة لم يتم إنشاؤه بواسطة Apigee Edge).
يشير المتغيّر request.queryparam.external_auth_code إلى أنّه يجب توفير رمز المصادقة الخارجي كمَعلمة طلب بحث، مثل ?external_auth_code=12345678. لطلب رمز المصادقة الخارجية في عنوان HTTP، مثلاً، اضبط هذه القيمة على request.header.external_auth_code. يُرجى الاطّلاع أيضًا على استخدام الرموز المميزة لبروتوكول OAuth التابع لجهات خارجية.
العنصر <ExternalRefreshToken>
<ExternalRefreshToken>request.queryparam.external_refresh_token</ExternalRefreshToken>
تُستخدَم لتحديد المكان الذي يمكن أن يعثر فيه Apigee Edge على رمز مميز خارجي لإعادة التحميل (أي رمز مميز لإعادة التحميل لم يتم إنشاؤه بواسطة Apigee Edge).
يشير العنصر المتغيّر request.queryparam.external_refresh_token إلى أنّه يجب توفير رمز مميّز لإعادة التحميل من مصدر خارجي كمَعلمة طلب بحث، مثل ?external_refresh_token=12345678. لفرض استخدام الرمز المميز لإعادة التحميل الخارجي
في عنوان HTTP، مثلاً، اضبط هذه القيمة على request.header.external_refresh_token. يُرجى الاطّلاع أيضًا على استخدام الرموز المميزة لبروتوكول OAuth التابع لجهات خارجية.
العنصر <GenerateResponse>
<GenerateResponse enabled='true'/>
إذا تم ضبطها على true، ستنشئ السياسة ردًا وتعرضه. على سبيل المثال، بالنسبة إلى GenerateAccessToken، قد يكون الردّ على النحو التالي:
{ "issued_at" : "1467841035013", "scope" : "read", "application_name" : "e31b8d06-d538-4f6b-9fe3-8796c11dc930", "refresh_token_issued_at" : "1467841035013", "status" : "approved", "refresh_token_status" : "approved", "api_product_list" : "[Product1, nhl_product]", "expires_in" : "1799", "developer.email" : "edward@slalom.org", "token_type" : "BearerToken", "refresh_token" : "rVSmm3QaNa0xBVFbUISz1NZI15akvgLJ", "client_id" : "Adfsdvoc7KX5Gezz9le745UEql5dDmj", "access_token" : "AnoHsh2oZ6EFWF4h0KrA0gC5og3a", "organization_name" : "cerruti", "refresh_token_expires_in" : "0", "refresh_count" : "0" }
إذا كانت القيمة false، لن يتم إرسال أي رد. بدلاً من ذلك، يتم ملء مجموعة من متغيّرات التدفق بقيم ذات صلة بوظيفة السياسة. على سبيل المثال، يتم ملء متغيّر التدفق المسمّى
oauthv2authcode.OAuthV2-GenerateAuthorizationCode.code برمز المصادقة الذي تم إنشاؤه حديثًا. يُرجى العِلم أنّ قيمة expires_in يتم التعبير عنها بالثواني في الرد.
|
القيمة التلقائية: |
خطأ |
|
الظهور: |
اختياري |
| النوع: | سلسلة |
| القيم الصالحة: | صواب أم خطأ |
| يُستخدَم مع أنواع الأذونات التالية: |
|
العنصر <GenerateErrorResponse>
<GenerateErrorResponse enabled='true'/>
في حال ضبطها على true، ستنشئ السياسة ردًا وتعرضه إذا تم ضبط السمة ContinueOnError على "صحيح". إذا كانت القيمة false (القيمة التلقائية)، لن يتم إرسال أي استجابة. بدلاً من ذلك، يتمّ ملء مجموعة من متغيّرات التدفق بقيم ذات صلة بوظيفة السياسة.
|
القيمة التلقائية: |
خطأ |
|
الظهور: |
اختياري |
| النوع: | سلسلة |
| القيم الصالحة: | صواب أم خطأ |
| يُستخدَم مع أنواع الأذونات التالية: |
|
<GrantType>
<GrantType>request.queryparam.grant_type</GrantType>
تخبر السياسة بمكان العثور على مَعلمة نوع الإذن التي يتم تمريرها في الطلب. وفقًا لمواصفات الإصدار 2.0 من OAuth، يجب توفير نوع المنح مع طلبات رموز الدخول ورموز التفويض. يمكن أن يكون المتغيّر عبارة عن عنوان أو مَعلمة طلب بحث أو مَعلمة نموذج (تلقائي).
على سبيل المثال، يشير request.queryparam.grant_type إلى أنّه يجب توفير كلمة المرور كمعلَمة طلب بحث، مثل ?grant_type=password.
لطلب نوع الإذن في عنوان HTTP، مثلاً، اضبط هذه القيمة على request.header.grant_type. راجِع أيضًا طلب رموز مميّزة للوصول ورموز تفويض.
|
القيمة التلقائية: |
request.formparam.grant_type (a x-www-form-urlencoded and specified in the request body) |
|
الظهور: |
اختياري |
| النوع: | سلسلة |
| القيم الصالحة: | متغيّر، كما هو موضّح أعلاه |
| يُستخدَم مع أنواع الأذونات التالية: |
|
عنصر <Operation>
<Operation>GenerateAuthorizationCode</Operation>
عملية OAuth 2.0 التي تنفّذها السياسة
|
القيمة التلقائية: |
إذا لم يتم تحديد |
|
الظهور: |
اختياري |
| النوع: | سلسلة |
| القيم الصالحة: |
|
العنصر <PassWord>
<PassWord>request.queryparam.password</PassWord>
يتم استخدام هذا العنصر مع نوع منح الإذن بكلمة المرور فقط. باستخدام نوع منح كلمة المرور، يجب توفير بيانات اعتماد المستخدم (كلمة المرور واسم المستخدم) لسياسة OAuthV2. يتم استخدام العنصرَين <PassWord> و<UserName> لتحديد المتغيرات التي يمكن أن يعثر فيها Edge على هذه القيم. في حال عدم تحديد هذه العناصر، تتوقّع السياسة العثور على القيم (تلقائيًا) في مَعلمات النموذج التي تحمل الاسمَين username وpassword. إذا لم يتم العثور على القيم، ستعرض السياسة خطأً. يمكنك استخدام العنصرَين <PassWord> و<UserName> للإشارة إلى أي متغيّر تدفق يحتوي على بيانات الاعتماد.
على سبيل المثال، يمكنك تمرير كلمة المرور في طلب رمز مميّز باستخدام مَعلمة طلب البحث وتعيين العنصر على النحو التالي:
<PassWord>request.queryparam.password</PassWord>. لطلب كلمة المرور في عنوان HTTP، اضبط هذه القيمة على request.header.password.
لا تفعل سياسة OAuthV2 أي شيء آخر باستخدام قيم بيانات الاعتماد هذه، بل يتحقّق Edge ببساطة من توفّرها. يقع على مطوّر واجهة برمجة التطبيقات مسؤولية استرداد قيم الطلب وإرسالها إلى موفّر خدمة تحديد الهوية قبل تنفيذ سياسة إنشاء الرمز المميز.
راجِع أيضًا طلب رموز الدخول ورموز التفويض.
|
القيمة التلقائية: |
request.formparam.password (a x-www-form-urlencoded and specified in the request body) |
|
الظهور: |
اختياري |
| النوع: | سلسلة |
| القيم الصالحة: | أي متغير تدفّق متاح للسياسة في وقت التشغيل |
| يُستخدَم مع أنواع الأذونات التالية: | كلمة المرور |
العنصر <RedirectUri>
<RedirectUri>request.queryparam.redirect_uri</RedirectUri>
تحدّد هذه السمة المكان الذي يجب أن يبحث فيه Edge عن المَعلمة redirect_uri في الطلب.
لمحة عن معرّفات الموارد المنتظمة (URI) الخاصة بإعادة التوجيه
يتم استخدام معرّفات الموارد المنتظمة لإعادة التوجيه مع رمز التفويض وأنواع منح الإذن الضمني. يحدّد معرّف الموارد المنتظم لإعادة التوجيه الخادم المفوّض (Edge) الذي سيتم إرسال رمز التفويض إليه (لنظام منح رمز التفويض) أو رمز الدخول (لنظام المنح الضمني). من المهم معرفة الحالات التي تكون فيها هذه المَعلمة مطلوبة والحالات التي تكون فيها اختيارية وكيفية استخدامها:
-
(مطلوب) إذا تم تسجيل عنوان URL لبرنامج معالجة ردّ الاتصال مع تطبيق المطوّر المرتبط بمفاتيح العميل الخاصة بالطلب، وإذا كان
redirect_uriمتوفّرًا في الطلب، يجب أن يتطابق العنوانان تمامًا. في حال عدم التطابق، سيتم عرض رسالة خطأ. للحصول على معلومات حول تسجيل تطبيقات المطوّرين على Edge وتحديد عنوان URL لبرنامج معالجة، راجِع تسجيل التطبيقات وإدارة مفاتيح واجهة برمجة التطبيقات. - (اختياري) في حال تسجيل عنوان URL لبرنامج معالجة، ولم يتم تضمين
redirect_uriفي الطلب، يعيد Edge التوجيه إلى عنوان URL لبرنامج المعالجة المسجَّل. - (مطلوبة) إذا لم يتم تسجيل عنوان URL لبرنامج معالجة، يجب إدخال
redirect_uri. يُرجى العِلم أنّه في هذه الحالة، سيقبل متصفّح Edge أي عنوان URL. يمكن أن تتسبّب هذه الحالة في حدوث مشكلة أمنية، لذلك يجب استخدامها فقط مع تطبيقات العميل الموثوق بها. إذا لم تكن تطبيقات العميل موثوقة، فإنّ أفضل ممارسة هي دائمًا اشتراط تسجيل عنوان URL لبرنامج معالجة.
يمكنك إرسال هذه المَعلمة في مَعلمة طلب بحث أو في عنوان. يشير المتغيّر request.queryparam.redirect_uri إلى أنّه يجب أن يكون RedirectUri متوفّرًا كمعلَمة طلب بحث، مثل ?redirect_uri=login.myapp.com. لفرض استخدام RedirectUri في عنوان HTTP، مثلاً، اضبط هذه القيمة على request.header.redirect_uri. راجِع أيضًا طلب رموز الدخول ورموز التفويض.
|
القيمة التلقائية: |
request.formparam.redirect_uri (a x-www-form-urlencoded and specified in the request body) |
|
الظهور: |
اختياري |
| النوع: | سلسلة |
| القيم الصالحة: | أي متغير تدفّق يمكن الوصول إليه في السياسة أثناء وقت التشغيل |
| يُستخدَم مع أنواع الأذونات التالية: |
يُستخدَم أيضًا مع عملية GenerateAuthorizationCode. |
العنصر <RefreshToken>
<RefreshToken>request.queryparam.refreshtoken</RefreshToken>
عند طلب رمز دخول مميّز باستخدام رمز مميّز لإعادة التحميل، يجب تقديم رمز إعادة التحميل في الطلب. يتيح لك هذا العنصر تحديد المكان الذي يجب أن يبحث فيه Edge عن رمز إعادة التحميل. على سبيل المثال، يمكن إرسالها كمعلَمة طلب بحث أو عنوان HTTP أو مَعلمة نموذج (الإعداد التلقائي).
يشير المتغيّر request.queryparam.refreshtoken إلى أنّه يجب أن تظهر الرمز المميز لإعادة التحميل كمعلَمة طلب بحث، مثل ?refresh_token=login.myapp.com. لطلب RefreshToken في عنوان HTTP، مثلاً، اضبط هذه القيمة على request.header.refresh_token. راجِع أيضًا طلب رموز الدخول ورموز التفويض.
|
القيمة التلقائية: |
request.formparam.refresh_token (a x-www-form-urlencoded and specified in the request body) |
|
الظهور: |
اختياري |
| النوع: | سلسلة |
| القيم الصالحة: | أي متغير تدفّق يمكن الوصول إليه في السياسة أثناء وقت التشغيل |
| يُستخدَم مع أنواع الأذونات التالية: |
|
العنصر <RefreshTokenExpiresIn>
<RefreshTokenExpiresIn>1000</RefreshTokenExpiresIn>
يفرض وقت انتهاء صلاحية رموز الدخول المميز بالمللي ثانية. قيمة وقت انتهاء الصلاحية هي قيمة من إنشاء النظام بالإضافة إلى القيمة <RefreshTokenExpiresIn>. إذا تم ضبط قيمة <RefreshTokenExpiresIn> على -1، تنتهي صلاحية رمز إعادة التحميل وفقًا للمدة القصوى لانتهاء صلاحية رمز إعادة تحميل OAuth. في حال عدم تحديد <RefreshTokenExpiresIn>، يطبّق النظام قيمة تلقائية تم ضبطها على مستوى النظام. يُرجى التواصل مع فريق دعم Apigee Edge للحصول على مزيد من المعلومات حول إعدادات النظام التلقائية.
يمكن أيضًا ضبط وقت انتهاء الصلاحية في وقت التشغيل باستخدام قيمة تلقائية مبرمَجة أو من خلال الإشارة إلى متغيّر تدفّق. على سبيل المثال، يمكنك تخزين قيمة انتهاء صلاحية الرمز المميّز في خريطة قيم مفاتيح، واستردادها، وتعيينها لمتغيّر، والإشارة إليها في السياسة. على سبيل المثال، kvm.oauth.expires_in.
يحدّد المقطع التالي متغيّر تدفّق وقيمة تلقائية أيضًا. يُرجى العِلم أنّ قيمة المتغيّر flow لها الأولوية على القيمة التلقائية المحدّدة.
<RefreshTokenExpiresIn ref="kvm.oauth.expires_in">
3600000 <!--default value in milliseconds-->
</RefreshTokenExpiresIn>السحابة الإلكترونية الخاصة: عند تثبيت Edge for Private Cloud، يتم ضبط القيمة التلقائية من خلال السمة conf_keymanagement_oauth_refresh_token_expiry_time_in_millis.
لضبط هذه السمة، اتّبِع الخطوات التالية:
- افتح ملف
message-processor.propertiesفي محرِّر. إذا لم يكن الملف متوفّرًا، أنشِئه باتّباع الخطوات التالية:vi /opt/apigee/customer/application/message-processor.properties
- اضبط السمة على النحو المطلوب:
conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
- تأكَّد من أنّ ملف الخصائص يملكه المستخدم "apigee":
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- أعِد تشغيل "معالج الرسائل".
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
|
القيمة التلقائية: |
63072000000 مللي ثانية (عامان) (اعتبارًا من 5 أغسطس 2024) |
|
الظهور: |
اختياري |
| النوع: | عدد صحيح |
| القيم الصالحة: |
|
| يُستخدَم مع أنواع الأذونات التالية: |
|
عنصر <ResponseType>
<ResponseType>request.queryparam.response_type</ResponseType>
يُعلم هذا العنصر Edge بنوع الإذن الذي يطلبه تطبيق العميل. ويتم استخدامها فقط مع مسارات رمز التفويض ونوع منح الإذن الضمني.
يبحث Edge تلقائيًا عن قيمة نوع الاستجابة في مَعلمة طلب بحث response_type. إذا أردت إلغاء هذا السلوك التلقائي، استخدِم العنصر <ResponseType> لضبط متغيّر سير عمل يحتوي على قيمة نوع الاستجابة. على سبيل المثال، إذا ضبطت هذا العنصر على request.header.response_type، سيبحث Edge عن نوع الاستجابة المطلوب تمريره في عنوان الطلب. راجِع أيضًا طلب رموز مميّزة للوصول ورموز تفويض.
|
القيمة التلقائية: |
request.formparam.response_type (a x-www-form-urlencoded and specified in the request body) |
|
الظهور: |
اختيارية: استخدِم هذا العنصر إذا أردت إلغاء السلوك التلقائي. |
| النوع: | سلسلة |
| القيم الصالحة: | إما code (لنوع منح الإذن برمز التفويض) أو token
(لنوع منح الإذن الضمني) |
| يُستخدَم مع أنواع الأذونات التالية: |
|
العنصر <ReuseRefreshToken>
<ReuseRefreshToken>true</ReuseRefreshToken>
عند ضبطها على true، تتم إعادة استخدام الرمز المميّز الحالي لإعادة التحميل إلى أن تنتهي صلاحيته. إذا كانت قيمة false، سيصدر Apigee Edge رمزًا مميّزًا جديدًا لإعادة التحميل عند تقديم رمز مميّز صالح لإعادة التحميل.
|
القيمة التلقائية: |
|
|
الظهور: |
اختياري |
| النوع: | قيمة منطقية |
| القيم الصالحة: |
|
| يُستخدَم مع نوع الإذن: |
|
العنصر <Scope>
<Scope>request.queryparam.scope</Scope>
إذا كان هذا العنصر متوفّرًا في إحدى سياستي GenerateAccessToken أو GenerateAuthorizationCode، يتم استخدامه لتحديد النطاقات التي سيتم منح الرمز المميّز أو الرمز لها. يتم عادةً تمرير هذه القيم إلى السياسة في الطلب من تطبيق عميل. يمكنك ضبط العنصر لقبول متغيّر سير العمل، ما يتيح لك اختيار طريقة تمرير النطاقات في الطلب. في المثال التالي، يشير request.queryparam.scope إلى أنّه يجب أن يكون النطاق متوفّرًا كمعلَمة طلب بحث، مثل ?scope=READ. لطلب النطاق
في عنوان HTTP، مثلاً، اضبط هذه القيمة
على request.header.scope.
إذا ظهر هذا العنصر في سياسة "VerifyAccessToken"، يتم استخدامه لتحديد النطاقات التي يجب أن تفرضها السياسة. في هذا النوع من السياسات، يجب أن تكون القيمة اسم نطاق "مضمّنًا بشكل ثابت"، ولا يمكنك استخدام متغيرات. على سبيل المثال:
<Scope>A B</Scope>
اطّلِع أيضًا على العمل مع نطاقات OAuth2 وطلب رموز الدخول ورموز التفويض.
|
القيمة التلقائية: |
ما مِن نطاق |
|
الظهور: |
اختياري |
| النوع: | سلسلة |
| القيم الصالحة: |
إذا تم استخدامها مع سياسات Generate*، تكون متغيّرًا في سير العمل. في حال استخدامها مع VerifyAccessToken، تكون قائمة بأسماء النطاقات (سلاسل) مفصولة بمسافات. |
| يُستخدَم مع أنواع الأذونات التالية: |
|
العنصر <State>
<State>request.queryparam.state</State>
في الحالات التي يجب أن يرسل فيها تطبيق العميل معلومات الحالة إلى خادم التفويض، يتيح لك هذا العنصر تحديد المكان الذي يجب أن تبحث فيه Edge عن قيم الحالة. على سبيل المثال، يمكن إرسالها كمَعلمة طلب بحث أو في عنوان HTTP. تُستخدَم قيمة الحالة عادةً كإجراء أمان لمنع هجمات CSRF.
على سبيل المثال، يشير request.queryparam.state إلى أنّه يجب أن تكون الحالة
موجودة كمعلَمة طلب بحث، مثل ?state=HjoiuKJH32. لفرض تضمين الولاية في عنوان HTTP، مثلاً، اضبط هذه القيمة على request.header.state. راجِع أيضًا طلب رموز مميّزة للوصول ورموز تفويض.
|
القيمة التلقائية: |
ما مِن ولايات |
|
الظهور: |
اختياري |
| النوع: | سلسلة |
| القيم الصالحة: | أي متغيّر في التدفق يمكن للسياسة الوصول إليه في وقت التشغيل |
| يُستخدَم مع أنواع الأذونات التالية: |
|
العنصر <StoreToken>
<StoreToken>true</StoreToken>
اضبط هذا العنصر على true عندما يكون العنصر <ExternalAuthorization>
true. يخبر العنصر <StoreToken> Apigee Edge بتخزين رمز الدخول الخارجي. وإلا لن يتم الاحتفاظ بها.
|
القيمة التلقائية: |
خطأ |
|
الظهور: |
اختياري |
| النوع: | منطقي |
| القيم الصالحة: | صواب أم خطأ |
| يُستخدَم مع أنواع الأذونات التالية: |
|
العنصر <SupportedGrantTypes>/<GrantType>
<SupportedGrantTypes> <GrantType>authorization_code</GrantType> <GrantType>client_credentials</GrantType> <GrantType>implicit</GrantType> <GrantType>password</GrantType> </SupportedGrantTypes>
تحدّد هذه السمة أنواع الأذونات التي توفّرها نقطة نهاية رمز OAuth المميز على Apigee Edge. يمكن أن تتيح نقطة النهاية أنواعًا متعددة من منح الأذونات (أي يمكن ضبط نقطة نهاية واحدة لتوزيع رموز الدخول لأنواع متعددة من منح الأذونات). لمزيد من المعلومات عن نقاط النهاية، يُرجى الاطّلاع على التعرّف على نقاط نهاية OAuth. يتم تمرير نوع الإذن في طلبات الرمز المميّز في المَعلمة grant_type.
في حال عدم تحديد أي أنواع أذونات متوافقة، سيكون نوعا الأذونات المسموح بهما هما authorization_code وimplicit فقط. راجِع أيضًا العنصر <GrantType> (وهو عنصر ذو مستوى أعلى يُستخدَم لتحديد المكان الذي يجب أن يبحث فيه Apigee Edge عن المَعلمة grant_type التي يتم تمريرها في طلب العميل. سيحرص Edge على أن تتطابق قيمة المَعلمة grant_type مع أحد أنواع منح الإذن المتاحة).
|
القيمة التلقائية: |
رمز التفويض والضمني |
|
الظهور: |
مطلوب |
| النوع: | سلسلة |
| القيم الصالحة: |
|
العنصر <Tokens>/<Token>
يُستخدَم مع عمليتَي ValidateToken وInvalidateToken. راجِع أيضًا الموافقة على رموز الدخول وإبطالها. يحدّد العنصر <Token> متغيّر التدفق الذي يحدّد مصدر الرمز المميّز المطلوب إبطاله. إذا كان من المتوقّع أن يرسل المطوّرون رموز الدخول كمعلَمات طلب بحث تحمل الاسم access_token، على سبيل المثال، استخدِم request.queryparam.access_token.
العنصر <UserName>
<UserName>request.queryparam.user_name</UserName>
يتم استخدام هذا العنصر مع نوع منح الإذن بكلمة المرور فقط. باستخدام نوع منح كلمة المرور، يجب توفير بيانات اعتماد المستخدم (كلمة المرور واسم المستخدم) لسياسة OAuthV2. يتم استخدام العنصرَين <PassWord> و<UserName> لتحديد المتغيرات التي يمكن أن يعثر فيها Edge على هذه القيم. في حال عدم تحديد هذه العناصر، تتوقّع السياسة العثور على القيم (تلقائيًا) في مَعلمات النموذج التي تحمل الاسمَين username وpassword. إذا لم يتم العثور على القيم، ستعرض السياسة خطأً. يمكنك استخدام العنصرَين <PassWord> و<UserName> للإشارة إلى أي متغيّر تدفق يحتوي على بيانات الاعتماد.
على سبيل المثال، يمكنك تمرير اسم المستخدم في مَعلمة طلب بحث وضبط العنصر <UserName> على النحو التالي:
<UserName>request.queryparam.username</UserName>.لطلب اسم المستخدم في عنوان HTTP، اضبط هذه القيمة على request.header.username.
لا تفعل سياسة OAuthV2 أي شيء آخر باستخدام قيم بيانات الاعتماد هذه، بل يتحقّق Edge ببساطة من توفّرها. يقع على مطوّر واجهة برمجة التطبيقات مسؤولية استرداد قيم الطلب وإرسالها إلى موفّر خدمة تحديد الهوية قبل تنفيذ سياسة إنشاء الرمز المميز.
راجِع أيضًا طلب رموز الدخول ورموز التفويض.
|
القيمة التلقائية: |
request.formparam.username (a x-www-form-urlencoded and specified in the request body) |
|
الظهور: |
اختياري |
| النوع: | سلسلة |
| القيم الصالحة: | أي إعداد متغيّر |
| يُستخدَم مع أنواع الأذونات التالية: | كلمة المرور |
التحقّق من صحة رموز الدخول
بعد إعداد نقطة نهاية الرمز المميّز لخادم وكيل لواجهة برمجة التطبيقات، يتم إرفاق سياسة OAuthV2 ذات صلة تحدّد عملية VerifyAccessToken بالتدفق الذي يعرض المورد المحمي.
على سبيل المثال، لضمان الموافقة على جميع الطلبات المرسَلة إلى واجهة برمجة تطبيقات، تفرض السياسة التالية التحقّق من صحة رمز الدخول:
<OAuthV2 name="VerifyOAuthAccessToken"> <Operation>VerifyAccessToken</Operation> </OAuthV2>
يتم ربط السياسة بمورد واجهة برمجة التطبيقات المطلوب حمايته. لضمان التحقّق من جميع الطلبات الموجّهة إلى واجهة برمجة التطبيقات، أرفِق السياسة بطلب PreFlow الخاص بـ ProxyEndpoint، على النحو التالي:
<PreFlow>
<Request>
<Step><Name>VerifyOAuthAccessToken</Name></Step>
</Request>
</PreFlow>يمكن استخدام العناصر الاختيارية التالية لتجاوز الإعدادات التلقائية لعملية VerifyAccessToken.
| الاسم | الوصف |
|---|---|
| النطاق |
قائمة بالنطاقات مفصولة بمسافات ستنجح عملية التحقّق إذا كان أحد النطاقات المدرَجة على الأقل متوفّرًا في رمز الدخول. على سبيل المثال، ستتحقّق السياسة التالية من رمز الدخول للتأكّد من أنّه يتضمّن نطاقًا واحدًا على الأقل من النطاقات المدرَجة. إذا كان الإذن READ أو WRITE متوفّرًا، ستنجح عملية التحقّق. <OAuthV2 name="ValidateOauthScopePolicy"> <Operation>VerifyAccessToken</Operation> <Scope>READ WRITE</Scope> </OAuthV2> |
| AccessToken | المتغيّر الذي يُتوقّع أن يكون رمز الدخول فيه. على سبيل المثال
request.queryparam.accesstoken. بشكلٍ تلقائي، من المتوقّع أن يقدّم التطبيق رمز الدخول في عنوان HTTP الخاص بالتفويض، وذلك وفقًا لمواصفات OAuth 2.0. استخدِم هذا الإعداد إذا كان من المتوقّع أن يتم عرض رمز الدخول في موقع غير عادي، مثل مَعلمة طلب بحث أو عنوان HTTP باسم آخر غير "تفويض". |
راجِع أيضًا تأكيد رموز الدخول وطلب رموز الدخول ورموز التفويض.
تحديد مواقع متغيّرات الطلب
بالنسبة إلى كل نوع من أنواع منح الإذن، تضع السياسة افتراضات بشأن الموقع الجغرافي أو المعلومات المطلوبة في رسائل الطلبات. تستند هذه الافتراضات إلى مواصفات OAuth 2.0. إذا كانت تطبيقاتك بحاجة إلى الانحراف عن مواصفات OAuth 2.0، يمكنك تحديد المواقع الجغرافية المتوقّعة لكل مَعلمة. على سبيل المثال، عند التعامل مع رمز تفويض، يمكنك تحديد موقع رمز التفويض ومعرّف العميل ومعرّف الموارد المنتظم (URI) الخاص بإعادة التوجيه والنطاق. ويمكن تحديدها كعناوين HTTP أو مَعلمات طلب البحث أو مَعلمات النموذج.
يوضّح المثال أدناه كيف يمكنك تحديد موقع مَعلمات رمز التفويض المطلوب كعناوين HTTP:
... <GrantType>request.header.grant_type</GrantType> <Code>request.header.code</Code> <ClientId>request.header.client_id</ClientId> <RedirectUri>request.header.redirect_uri</RedirectUri> <Scope>request.header.scope</Scope> ...
أو، إذا كان ذلك ضروريًا لدعم قاعدة تطبيقات العملاء، يمكنك الجمع بين العناوين ومَعلمات طلب البحث:
... <GrantType>request.header.grant_type</GrantType> <Code>request.header.code</Code> <ClientId>request.queryparam.client_id</ClientId> <RedirectUri>request.queryparam.redirect_uri</RedirectUri> <Scope>request.queryparam.scope</Scope> ...
يمكن ضبط موقع جغرافي واحد فقط لكل مَعلمة.
متغيّرات التدفق
يتم ملء متغيرات التدفق المحددة في هذا الجدول عند تنفيذ سياسات OAuth المعنية، وبالتالي تكون متاحة للسياسات أو التطبيقات الأخرى التي يتم تنفيذها في تدفق خادم وكيل API.
عملية VerifyAccessToken
يتم تنفيذ عملية VerifyAccessToken، ويتم ملء عدد كبير من متغيرات التدفق في سياق التنفيذ الخاص بالوكيل. تمنحك هذه المتغيرات خصائص ذات صلة برمز الدخول وتطبيق المطوّر والمطوّر والشركة. يمكنك استخدام سياسة AssignMessage أو JavaScript، على سبيل المثال، لقراءة أي من هذه المتغيرات واستخدامها حسب الحاجة لاحقًا في التدفق. ويمكن أن تكون هذه المتغيرات مفيدة أيضًا لأغراض تصحيح الأخطاء.
proxy.pathsuffix). ولا يلزم ضبط المتغير flow.resource.name بشكل صريح.
في حال عدم ضبط منتجات واجهة برمجة التطبيقات باستخدام بيئات صالحة وخوادم وكيلة لواجهة برمجة التطبيقات، يجب ضبط flow.resource.name بشكل صريح لتعبئة متغيرات منتج واجهة برمجة التطبيقات في التدفق. للاطّلاع على تفاصيل حول إعداد المنتج، يُرجى الرجوع إلى استخدام واجهة برمجة التطبيقات لإدارة Edge من أجل نشر واجهات برمجة التطبيقات.
المتغيّرات الخاصة بالرمز المميّز
| المتغيّرات | الوصف |
|---|---|
organization_name |
اسم المؤسسة التي يتم فيها تنفيذ الخادم الوكيل. |
developer.id |
معرّف المطوّر المرتبط بتطبيق العميل المسجّل. |
developer.app.name |
اسم المطوّر المرتبط بتطبيق العميل المسجَّل |
client_id |
معرّف العميل لتطبيق العميل المسجَّل |
grant_type |
نوع الإذن المرتبط بالطلب. |
token_type |
نوع الرمز المميز المرتبط بالطلب. |
access_token |
رمز الدخول الذي يتم التحقّق منه |
accesstoken.{custom_attribute} |
سمة مخصّصة مسماة في رمز الدخول |
issued_at |
تاريخ إصدار رمز الدخول معبَّرًا عنه بتوقيت يونكس بالملّي ثانية |
expires_in |
تمثّل هذه السمة وقت انتهاء صلاحية رمز الدخول. ويتم التعبير عنها
بالثواني. على الرغم من أنّ العنصر ExpiresIn يضبط تاريخ انتهاء الصلاحية بالملّي ثانية، يتم التعبير عن القيمة بالثواني في استجابة الرمز المميز ومتغيرات التدفق. |
status |
حالة رمز الدخول (مثل تمت الموافقة عليه أو تم إبطاله) |
scope |
النطاق (إن وُجد) المرتبط برمز الدخول |
apiproduct.<custom_attribute_name> |
سمة مخصّصة مسماة لمنتج واجهة برمجة التطبيقات المرتبط بتطبيق العميل المسجّل. |
apiproduct.name |
اسم منتج واجهة برمجة التطبيقات المرتبط بتطبيق العميل المسجّل. |
revoke_reason |
(Apigee hybrid فقط) يشير إلى سبب إبطال رمز الدخول المميز. يمكن أن تكون القيمة |
المتغيّرات الخاصة بالتطبيق
ترتبط هذه المتغيّرات بتطبيق المطوّر المرتبط بالرمز المميّز.
| المتغيّرات | الوصف |
|---|---|
app.name |
|
app.id |
|
app.accessType |
|
app.callbackUrl |
|
app.status |
موافق عليها أو تم إبطالها |
app.scopes |
|
app.appFamily |
|
app.apiproducts |
|
app.appParentStatus |
|
app.appType |
على سبيل المثال: مطوِّر |
app.appParentId |
|
app.created_by |
|
app.created_at |
|
app.last_modified_at |
|
app.last_modified_by |
|
app.{custom_attributes} |
سمة مخصّصة مسماة لتطبيق العميل المسجّل |
المتغيّرات الخاصة بالمطوّرين
إذا كانت قيمة app.appType هي "Company"، سيتم ملء سمات الشركة، وإذا كانت قيمة app.appType هي "Developer"، سيتم ملء سمات المطوّر.
| المتغيّرات | الوصف |
|---|---|
| المتغيّرات الخاصة بالمطوّرين | |
developer.id |
|
developer.userName |
|
developer.firstName |
|
developer.lastName |
|
developer.email |
|
developer.status |
نشط أو غير نشط |
developer.apps |
|
developer.created_by |
|
developer.created_at |
|
developer.last_modified_at |
|
developer.last_modified_by |
|
developer.{custom_attributes} |
سمة مخصّصة تحمل اسم المطوِّر. |
المتغيرات الخاصة بالشركة
إذا كانت قيمة app.appType هي "Company"، سيتم ملء سمات الشركة، وإذا كانت قيمة app.appType هي "Developer"، سيتم ملء سمات المطوّر.
| المتغيّرات | الوصف |
|---|---|
company.id |
|
company.displayName |
|
company.apps |
|
company.appOwnerStatus |
|
company.created_by |
|
company.created_at |
|
company.last_modified_at |
|
company.last_modified_by |
|
company.{custom_attributes} |
سمة مخصّصة للشركة تحمل اسمًا |
عملية GenerateAuthorizationCode
يتم ضبط هذه المتغيّرات عند تنفيذ عملية GenerateAuthorizationCode بنجاح:
البادئة: oauthv2authcode.{policy_name}.{variable_name}
مثال: oauthv2authcode.GenerateCodePolicy.code
| متغيّر | الوصف |
|---|---|
code |
رمز التفويض الذي يتم إنشاؤه عند تنفيذ السياسة |
redirect_uri |
تمثّل هذه السمة معرّف الموارد المنتظم (URI) لإعادة التوجيه المرتبط بتطبيق العميل المسجَّل. |
scope |
نطاق OAuth الاختياري الذي تم تمريره في طلب البرنامج |
client_id |
معرّف العميل الذي تم تمريره في طلب العميل. |
عمليتَي GenerateAccessToken وRefreshAccessToken
يتم ضبط هذه المتغيّرات عند تنفيذ العمليتَين GenerateAccessToken وRefreshAccessToken بنجاح. يُرجى العِلم أنّ متغيّرات الرمز المميّز لإعادة التحميل لا تنطبق على نوع تدفّق منح بيانات اعتماد العميل.
البادئة: oauthv2accesstoken.{policy_name}.{variable_name}
مثال: oauthv2accesstoken.GenerateTokenPolicy.access_token
| اسم المتغير | الوصف |
|---|---|
access_token |
رمز الدخول الذي تم إنشاؤه |
client_id |
معرّف العميل لتطبيق المطوّر المرتبط بهذا الرمز المميّز |
expires_in |
قيمة انتهاء صلاحية الرمز المميّز لمزيد من التفاصيل، يُرجى الاطّلاع على عنصر <ExpiresIn>. يُرجى العِلم أنّ قيمة expires_in في الردّ يتم التعبير عنها بالثواني. |
scope |
قائمة بالنطاقات المتاحة التي تم ضبطها للرمز المميّز اطّلِع على العمل مع نطاقات OAuth2. |
status |
إما approved أو revoked |
token_type |
تم ضبطها على BearerToken. |
developer.email |
عنوان البريد الإلكتروني للمطوّر المسجّل الذي يملك تطبيق المطوّر المرتبط بالرمز المميز. |
organization_name |
المؤسسة التي يتم فيها تنفيذ الوكيل |
api_product_list |
قائمة بالمنتجات المرتبطة بتطبيق المطوّر المقابل للرمز المميّز |
refresh_count |
|
refresh_token |
الرمز المميّز لإعادة التحميل الذي تم إنشاؤه. يُرجى العِلم أنّه لا يتم إنشاء رموز مميّزة لإعادة التحميل لنوع منح بيانات اعتماد العميل. |
refresh_token_expires_in |
تمثّل هذه السمة مدة صلاحية رمز إعادة التحميل بالثواني. |
refresh_token_issued_at |
قيمة الوقت هذه هي التمثيل السلسلي لكمية الطابع الزمني المقابل المكوّن من 32 بت. على سبيل المثال، يتوافق "Wed, 21 Aug 2013 19:16:47 UTC" مع قيمة الطابع الزمني 1377112607413. |
refresh_token_status |
إما approved أو revoked |
GenerateAccessTokenImplicitGrant
يتم ضبط هذه المتغيّرات عند تنفيذ عملية GenerateAccessTokenImplicit بنجاح لسير عمل نوع الإذن الضمني.
البادئة: oauthv2accesstoken.{policy_name}.{variable_name}
مثال: oauthv2accesstoken.RefreshTokenPolicy.access_token
| متغيّر | الوصف |
|---|---|
oauthv2accesstoken.access_token |
رمز الدخول المميز الذي يتم إنشاؤه عند تنفيذ السياسة |
oauthv2accesstoken.{policy_name}.expires_in |
قيمة انتهاء صلاحية الرمز المميّز بالثواني لمزيد من التفاصيل، يُرجى الاطّلاع على العنصر <ExpiresIn>. |
مرجع الأخطاء
يصف هذا القسم رموز الأعطال ورسائل الخطأ التي يتم عرضها ومتغيّرات الأعطال التي يضبطها Edge عندما تؤدي هذه السياسة إلى حدوث خطأ. من المهم معرفة هذه المعلومات إذا كنت بصدد تطوير قواعد الأخطاء بهدف التعامل مع الأخطاء. لمزيد من المعلومات، يمكنك الاطّلاع على المعلومات التي يجب معرفتها عن أخطاء السياسات والتعامل مع الأخطاء.
أخطاء وقت التشغيل
يمكن أن تحدث هذه الأخطاء عند تنفيذ السياسة.
| رمز الخطأ | رموز حالة HTTP | السبب | تم طرحها من خلال العمليات |
|---|---|---|---|
steps.oauth.v2.access_token_expired |
401 | انتهت صلاحية الرمز المميّز للوصول. |
VerifyAccessToken |
steps.oauth.v2.access_token_not_approved |
401 | تم إبطال رمز الوصول. | VerifyAccessToken |
steps.oauth.v2.apiresource_doesnot_exist |
401 | لا يتوفّر المورد المطلوب في أيّ من منتجات واجهة برمجة التطبيقات المرتبطة برمز الدخول. | VerifyAccessToken |
steps.oauth.v2.FailedToResolveAccessToken |
500 | توقّعت السياسة العثور على رمز وصول في متغيّر محدّد في عنصر
<AccessToken>، ولكن تعذّر حلّ المتغيّر. |
GenerateAccessToken |
steps.oauth.v2.FailedToResolveAuthorizationCode |
500 | توقّعت السياسة العثور على رمز تفويض في متغيّر محدّد في عنصر
<Code>، ولكن تعذّر حلّ المتغيّر. |
GenerateAuthorizationCode |
steps.oauth.v2.FailedToResolveClientId |
500 | توقّعت السياسة العثور على رقم تعريف العميل في متغيّر محدّد في عنصر
<ClientId>، ولكن تعذّر حلّ المتغيّر. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.FailedToResolveRefreshToken |
500 | كانت السياسة تتوقّع العثور على رمز تنشيط مفتاح المرور في متغيّر محدّد في العنصر
<RefreshToken>، ولكن تعذّر حلّ المتغيّر. |
RefreshAccessToken |
steps.oauth.v2.FailedToResolveToken |
500 | توقّعت السياسة العثور على رمز مميّز في متغيّر محدّد في عنصر
<Tokens>، ولكن تعذّر حلّ المتغيّر. |
ValidateToken |
steps.oauth.v2.InsufficientScope |
403 | يحتوي رمز الوصول الذي تم تقديمه في الطلب على نطاق لا يتطابق مع النطاق المحدّد في سياسة التحقّق من رمز الوصول. للتعرّف على النطاق، يُرجى الاطّلاع على العمل مع نطاقات OAuth2. | VerifyAccessToken |
steps.oauth.v2.invalid_access_token |
401 | الرمز المميّز للوصول الذي تم إرساله من العميل غير صالح. | VerifyAccessToken |
steps.oauth.v2.invalid_client |
401 |
يتم عرض اسم الخطأ هذا عندما يتم ضبط سمة ملاحظة: ننصحك بتغيير شروط قاعدة الأعطال
الحالية لرصد اسمَي |
GenerateAccessToken RefreshAccessToken |
steps.oauth.v2.InvalidRequest |
400 | يُستخدَم اسم الخطأ هذا لأنواع مختلفة من الأخطاء، عادةً بسبب عدم توفّر
أو إرسال مَعلمات غير صحيحة في الطلب. إذا تم ضبط <GenerateResponse>
على false، استخدِم متغيّرات الأعطال (الموضّحة أدناه) لاسترداد تفاصيل عن
الخطأ، مثل اسم العُطل وسببه. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.InvalidAccessToken |
401 | لا يتضمّن عنوان التفويض كلمة "Bearer"، وهي مطلوبة. على سبيل المثال: Authorization: Bearer your_access_token |
VerifyAccessToken |
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound |
401 |
لا يتوفّر خادم وكيل لواجهة برمجة التطبيقات في المنتج المرتبط برمز الوصول. ملاحظات: تأكَّد من ضبط المنتج المرتبط برمز المرور للوصول بشكل صحيح. على سبيل المثال، إذا كنت تستخدم أحرف البدل في مسارات الموارد، تأكَّد من استخدام أحرف البدل بشكل صحيح. اطّلِع على إنشاء منتجات واجهة برمجة التطبيقات للاطّلاع على التفاصيل. يمكنك أيضًا الاطّلاع على هذه مشاركة في منتدى Apigee للحصول على مزيد من الإرشادات حول أسباب حدوث هذا الخطأ. |
VerifyAccessToken |
steps.oauth.v2.InvalidClientIdentifier |
500 |
يتم عرض اسم الخطأ هذا عند ضبط سمة |
GenerateAccessToken |
steps.oauth.v2.InvalidParameter |
500 | يجب أن تحدّد السياسة إما رمز دخول أو رمز تفويض، ولكن ليس كليهما. | GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
steps.oauth.v2.InvalidTokenType |
500 | يتطلّب عنصر <Tokens>/<Token> منك تحديد نوع الرمز المميّز
. (على سبيل المثال، refreshtoken). إذا أرسل العميل نوعًا غير صحيح، يتم طرح
هذا الخطأ. |
ValidateToken InvalidateToken |
steps.oauth.v2.MissingParameter |
500 | نوع الاستجابة هو token، ولكن لم يتم تحديد أي أنواع منح. |
GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
steps.oauth.v2.UnSupportedGrantType |
500 |
حدّد العميل نوع إذن غير متوافق مع السياسة (غير مُدرَج في العنصر <SupportedGrantTypes>). ملاحظة: هناك خطأ حاليًا يؤدي إلى عدم عرض أخطاء نوع الإذن غير المتوافقة بشكل صحيح. في حال حدوث خطأ في نوع الإذن غير المتوافق، لا يدخل الوكيل في مسار الخطأ على النحو المتوقّع. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
أخطاء النشر
يمكن أن تحدث هذه الأخطاء عند نشر خادم وكيل يتضمّن هذه السياسة.
| اسم الخطأ | السبب |
|---|---|
InvalidValueForExpiresIn |
بالنسبة إلى العنصر |
InvalidValueForRefreshTokenExpiresIn |
بالنسبة إلى العنصر <RefreshTokenExpiresIn>، تكون القيم الصالحة هي الأعداد الكلية
الموجبة و-1. |
InvalidGrantType |
تم تحديد نوع منحة غير صالح في عنصر <SupportedGrantTypes>. اطّلِع على مرجع السياسة للحصول على قائمة بالأنواع الصالحة. |
ExpiresInNotApplicableForOperation |
تأكَّد من أنّ العمليات المحدّدة في عنصر <Operations> تتيح انتهاء الصلاحية. على سبيل المثال، لا تفعل ذلك عملية VerifyToken. |
RefreshTokenExpiresInNotApplicableForOperation |
تأكَّد من أنّ العمليات المحدّدة في عنصر <Operations> تتيح انتهاء صلاحية رمز إعادة التحميل المميّز. على سبيل المثال، لا تفعل ذلك عملية VerifyToken. |
GrantTypesNotApplicableForOperation |
تأكَّد من أنّ أنواع الأذونات المحدّدة في <SupportedGrantTypes> متوافقة مع العملية المحدّدة. |
OperationRequired |
يجب تحديد عملية في هذه السياسة باستخدام العنصر ملاحظة: إذا لم يكن عنصر |
InvalidOperation |
يجب تحديد عملية صالحة في هذه السياسة باستخدام العنصر
ملاحظة: إذا كان عنصر |
TokenValueRequired |
يجب تحديد قيمة الرمز المميّز <Token> في العنصر
<Tokens>. |
متغيّرات الأعطال
يتم ضبط هذه المتغيّرات عندما تؤدي هذه السياسة إلى حدوث خطأ أثناء التشغيل.
<GenerateResponse> على
false. إذا كانت قيمة <GenerateResponse> هي
true، تعرض السياسة استجابة للعملاء على الفور في حال حدوث خطأ،
ويتم تخطّي مسار الخطأ ولا تتم تعبئة هذه المتغيّرات. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة المعلومات التي تحتاج إلى معرفتها عن أخطاء السياسات.| المتغيّرات | المكان | مثال |
|---|---|---|
fault.name="fault_name" |
fault_name هو اسم الخطأ، كما هو موضّح في جدول أخطاء وقت التشغيل أعلاه. اسم الخطأ هو الجزء الأخير من رمز الخطأ. | fault.name = "InvalidRequest" |
oauthV2.policy_name.failed |
policy_name هو اسم السياسة التي تسبّبت في الخطأ والذي حدّده المستخدم. | oauthV2.GenerateAccesstoken.failed = true |
oauthV2.policy_name.fault.name |
policy_name هو اسم السياسة التي تسبّبت في الخطأ، والذي حدّده المستخدم. | oauthV2.GenerateAccesstoken.fault.name = InvalidRequest
ملاحظة: بالنسبة إلى عملية VerifyAccessToken، يتضمّن اسم الخطأ اللاحقة التالية: |
oauthV2.policy_name.fault.cause |
policy_name هو اسم السياسة التي تسبّبت في الخطأ والذي حدّده المستخدم. | oauthV2.GenerateAccesstoken.cause = Required param : grant_type |
مثال على استجابة الخطأ
يتم إرسال هذه الردود مرة أخرى إلى العميل إذا كان عنصر <GenerateResponse>
صحيحًا.
errorcode من استجابة الخطأ. لا تعتمد على النص في
faultstring، لأنّه قد يتغيّر.إذا كانت قيمة <GenerateResponse> هي صحيح، تعرض السياسة أخطاء
بهذا التنسيق للعمليات التي تُنشئ الرموز المميّزة والرموز. للحصول على قائمة كاملة، يُرجى الاطّلاع على
مرجع استجابة خطأ بروتوكول HTTP في OAuth.
{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}إذا كانت قيمة <GenerateResponse> هي true، تعرض السياسة أخطاء
بهذا التنسيق لعمليات التحقّق والتحقق من الصحة. للحصول على قائمة كاملة، يُرجى الاطّلاع على مرجع استجابة خطأ بروتوكول HTTP في OAuth.
{ { "fault":{ "faultstring":"Invalid Access Token", "detail":{ "errorcode":"keymanagement.service.invalid_access_token" } } }
مثال على قاعدة الخطأ
<FaultRule name=OAuthV2 Faults">
<Step>
<Name>AM-InvalidClientResponse</Name>
<Condition>(fault.name = "invalid_client") OR (fault.name = "InvalidClientIdentifier")</Condition>
</Step>
<Step>
<Name>AM-InvalidTokenResponse</Name>
<Condition>(fault.name = "invalid_access_token")</Condition>
</Step>
<Condition>(oauthV2.failed = true) </Condition>
</FaultRule>مخطط السياسة
يتم تحديد كل نوع من أنواع السياسات من خلال مخطّط XML (.xsd). وللحصول على مرجع، تتوفّر مخطّطات السياسات على GitHub.
العمل باستخدام إعدادات OAuth التلقائية
يتم توفير نقطة نهاية لرمز OAuth المميز لكل مؤسسة (حتى المؤسسة التي تستخدم فترة تجريبية مجانية) على Apigee Edge. تم ضبط نقطة النهاية مسبقًا باستخدام سياسات في خادم وكيل لواجهة برمجة التطبيقات يُسمى oauth. يمكنك البدء في استخدام نقطة نهاية الرمز المميز فور إنشاء حساب على Apigee Edge. للحصول على التفاصيل، راجِع التعرّف على نقاط نهاية OAuth.
إزالة رموز الدخول
يتم تلقائيًا إزالة رموز OAuth2 من نظام Apigee Edge بعد 3 أيام (259200 ثانية) من انتهاء صلاحية كل من رمز الدخول ورمز التحديث (في حال توفّره). في بعض الحالات، قد تحتاج إلى تغيير هذا الإعداد التلقائي. على سبيل المثال، قد تحتاج إلى تقليل وقت الإزالة لتوفير مساحة على القرص إذا كان يتم إنشاء عدد كبير من الرموز المميزة.
إذا كنت تستخدم Edge for Private Cloud، يمكنك تغيير هذا الإعداد التلقائي من خلال ضبط سمات المؤسسة كما هو موضّح في هذا القسم. (تنطبق عملية إزالة الرموز المميزة المنتهية الصلاحية التي تستغرق 3 أيام على Edge for Private Cloud الإصدار 4.19.01 والإصدارات الأحدث. في الإصدارات السابقة، تبلغ فترة الإزالة التلقائية 180 يومًا).
تعديل إعدادات الحذف في Edge Private Cloud 4.16.01 والإصدارات الأحدث
ملاحظة: لا تتأثر إلا الرموز المميزة التي تم إنشاؤها بعد تطبيق هذه الإعدادات، ولا تنطبق الإعدادات على الرموز المميزة التي تم إنشاؤها في وقت سابق.
- افتح هذا الملف لتعديله:
/opt/apigee/customer/application/message-processor.properties
- أضِف السمة التالية لضبط عدد الثواني التي يجب الانتظار خلالها قبل إزالة الرمز المميز بعد انتهاء صلاحيته:
conf_keymanagement_oauth.access.token.purge.after.seconds=<number of seconds>
- أعِد تشغيل معالج الرسائل. على سبيل المثال:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
<ExpiresIn> و<RefreshTokenExpiresIn>.
تعديل إعدادات الحذف في Edge Private Cloud 4.15.07
ملاحظة: لا تتأثر إلا الرموز المميزة التي تم إنشاؤها بعد تطبيق هذه الإعدادات، ولا تنطبق الإعدادات على الرموز المميزة التي تم إنشاؤها في وقت سابق.
-
اضبط قيمًا موجبة للسمتَين
<ExpiresIn>و<RefreshTokenExpiresIn>في سياسة OAuthV2. يتم قياس القيم بالملي ثانية. على سبيل المثال:<ExpiresIn>1000</ExpiresIn> <RefreshTokenExpiresIn>10000</RefreshTokenExpiresIn>
-
أعِد نشر الخادم الوكيل.
-
استخدِم واجهة برمجة التطبيقات هذه لتعديل خصائص إزالة الرموز المميّزة لمؤسستك:
POST https://<host-name>/v1/organizations/<org-name>
الحمولة:
<Organization name="AutomationOrganization"> <Description>Desc</Description> <Properties> <Property name="keymanagement.oauth20.access.token.purge">true</Property> <Property name="keymanagement.oauth20.access.token.purge.after.seconds">120</Property> </Properties> </Organization> -
أعِد تشغيل معالج الرسائل. على سبيل المثال:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
تضبط واجهة برمجة التطبيقات هذه السمة "محو الرمز المميز" على "صحيح" للمؤسسة التي تحمل الاسم AutomationOrganization. في هذه الحالة، ستتم إزالة رمز الدخول من قاعدة البيانات بعد 120 ثانية من انتهاء صلاحية كل من الرمز المميز ورمز إعادة التحميل.
السلوك غير المتوافق مع طلب التعليقات (RFC)
تعرض سياسة OAuthV2 استجابة رمز مميّز تتضمّن بعض الخصائص غير المتوافقة مع RFC. يعرض الجدول التالي السمات غير المتوافقة التي تعرضها سياسة OAuthV2 والسمات المتوافقة المقابلة.
| تعرض OAuthV2 ما يلي: | السمة المتوافقة مع RFC هي: |
|---|---|
"token_type":"BearerToken" |
"token_type":"Bearer"
|
"expires_in":"3600" |
"expires_in":3600
(القيمة المتوافقة هي رقم، وليس سلسلة). |
بالإضافة إلى ذلك، يكون ردّ الخطأ لرمز مميز منتهي الصلاحية لإعادة التحميل عند استخدام grant_type = refresh_token على النحو التالي:
{"ErrorCode" : "InvalidRequest", "Error" :"Refresh Token expired"}ومع ذلك، فإنّ الرد المتوافق مع RFC هو:
{"error" : "invalid_grant", "error_description" :"refresh token expired"}