أنت تعرض مستندات Apigee Edge.
انتقل إلى
مستندات Apigee X. معلومات
الإصدار: 1.0.2
عليك المصادقة مع Google للوصول إلى واجهات Google APIs التي تحدّدها.
يمكنك استخدام هذه الإضافة للحصول على رمز مميّز (OAuth أو JWT) لخدمات Google Cloud، ثم استخدام الرمز المميّز لعمليات الاستدعاء اللاحقة لواجهة Google API، مثلاً باستخدام سياسة ServiceCallout.
على سبيل المثال، في الخادم الوكيل لواجهة برمجة التطبيقات، قد تحصل على رمز مميّز بهذه الإضافة، وخزِّن الرمز المميّز مؤقتًا باستخدام سياسة Populatecache، ثم مرِّر الرمز المميّز من خلال سياسة ServiceCallout للوصول إلى خدمات Google Cloud من داخل مسار الخادم الوكيل لواجهة برمجة التطبيقات.
المتطلبات الأساسية
يوفّر هذا المحتوى مرجعًا لإعداد هذه الإضافة واستخدامها. قبل استخدام الإضافة من خادم وكيل لواجهة برمجة التطبيقات باستخدام سياسة ExtensionCallout، عليك إجراء ما يلي:
تأكَّد من أنّ الحساب الذي ستستخدمه الإضافة، وهو الحساب الذي تمثّله حساب الخدمة الذي ستستخدمه لبيانات الاعتماد، لديه إمكانية الوصول إلى خدمات Google Cloud التي ستصادق الإضافة معها.
استخدِم محتوى ملف JSON لمفتاح حساب الخدمة الناتج عند إضافة وضبط الإضافة باستخدام مرجع الإعدادات.
لمحة عن المصادقة باستخدام Google Cloud
تطلب هذه الإضافة المصادقة من Google Cloud من خلال تمثيل عضو محدّد في مشروعك على Google Cloud. يمكنك استخدام ملف JSON لحساب الخدمة لعضو المشروع عند ضبط هذه الإضافة.
ونتيجةً لذلك، ستتمكّن هذه الإضافة من الوصول إلى الموارد التي يملك هذا العضو إذنًا لها فقط. بمعنى آخر، تعتمد المصادقة الناجحة لهذه الإضافة على تطابق بين الأذونات الممنوحة في Google Cloud Console والوصول الذي تطلبه الإضافة (من خلال النطاقات أو الجمهور) في وقت التشغيل.
بشكل عام، ستكون خطوات المصادقة للوصول إلى واجهات برمجة التطبيقات من هذه الإضافة على النحو التالي:
تأكَّد من أنّ حساب خدمة الأعضاء الذي تمثّله هذه الإضافة لديه إذن الوصول إلى مورد Google الذي تريد الوصول إليه. يمكنك استخدام صفحة Cloud Identity وإدارة الوصول (Cloud IAM) في Google Cloud Console لمنح الأدوار لعضو المشروع الذي تمثله هذه الإضافة.
استخدِم مفتاح حساب الخدمة الخاص بهذا العضو عند ضبط هذه الإضافة.
عند ضبط سياسة ExtensionCallout لاستخدام هذه الإضافة، يجب طلب المصادقة فقط للموارد التي يمكن لعضو المشروع الوصول إليها.
نماذج
توضّح الأمثلة التالية كيفية المصادقة من خلال Google Cloud باستخدام سياسة ExtensionCallout.
الحصول على رمز الدخول
في المثال التالي، يسترد الإجراء getOauth2AccessToken
للإضافة رمزًا مميّزًا لاستخدامه في الطلبات إلى Cloud Translation API.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Get-Access-Token">
<DisplayName>Get Access Token</DisplayName>
<Connector>google-auth</Connector>
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"https://www.googleapis.com/auth/cloud-translation"
]
}]]></Input>
<Output>google.credentials</Output>
</ConnectorCallout>
تبدو قيمة الردّ كما يلي:
{
"access_token":"ya29.c.ElpSB...BMgkALBJ0kou-8",
"token_type":"Bearer",
"expiresInSec": 3600
}
تسترد سياسة assignMessage التالية قيمة الردّ من سياسة ExtensionCallout أعلاه وتنسخها في حمولة الردود. ويمكن الاستفادة من ذلك في تصحيح الأخطاء. من الناحية العملية، قد لا ترغب في إرجاع الرمز المميز إلى العميل.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Retrieve-Auth-Token">
<DisplayName>Retrieve Auth Token</DisplayName>
<AssignTo type="response" createNew="false"/>
<Set>
<Payload contentType="application/json">{google.credentials.access_token}</Payload>
</Set>
</AssignMessage>
التخزين المؤقت لرمز الدخول
لتجنّب إجراء طلبات غير ضرورية لاسترداد رمز مميّز، ننصحك بتخزين الرمز المميّز الذي تتلقّاه مؤقتًا. بالنسبة إلى المكالمات اللاحقة التي تتطلّب رمزًا مميّزًا، سيكون استرداد الرمز المميّز من ذاكرة التخزين المؤقت في Apigee Edge أسرع من الحصول على رمز مميّز جديد. وعند انتهاء صلاحية الرمز المميّز المخزن مؤقتًا، يمكنك استرداد رمز مميّز جديد وإعادة تحميل ذاكرة التخزين المؤقت التي تحتوي عليه.
يوضّح الرمز التالي من مثال لخادم وكيل لواجهة برمجة التطبيقات كيفية ضبط رمز مميّز مخزَّن مؤقتًا واستخدامه لطلب واجهة برمجة التطبيقات Google Translation API من خلال سياسة ServiceCallout. كل مثال على الرمز هنا يتعلّق بسياسة مختلفة في مسار العملية.
يتم تنفيذ السياسات التالية بالتسلسل الموضّح في ملف XML الخاص بالتدفق التالي:
<Request>
<!-- Attempt to get a token from the cache. -->
<Step>
<Name>Get-Cached-Auth-Token</Name>
</Step>
<!-- Only execute the following ExtensionCallout policy if the call to the
cache couldn't retrieve a cached token. -->
<Step>
<Name>Google-Auth-Callout</Name>
<Condition>lookupcache.Get-Cached-Auth-Token.cachehit is false</Condition>
</Step>
<!-- Only execute the following PopulateCache policy if the call to the
cache couldn't retrieve a cached token. -->
<Step>
<Name>Cache-Auth-Token</Name>
<Condition>lookupcache.Get-Cached-Auth-Token.cachehit is false</Condition>
</Step>
<!-- Use the ServiceCallout policy to call the translate API. -->
<Step>
<Name>Translate-Text</Name>
</Step>
</Request>
تحاول سياسة Lookupcache التالية الحصول على رمز مميّز من ذاكرة التخزين المؤقت. إذا سبق الحصول على الرمز المميّز ووضعه في ذاكرة التخزين المؤقت، ستتمكّن هذه السياسة من استخدامه من خلال الخادم الوكيل لواجهة برمجة التطبيقات.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <LookupCache async="false" continueOnError="false" enabled="true" name="Get-Cached-Auth-Token"> <DisplayName>Get Cached Auth Token</DisplayName> <!-- Give cache key and scope to specify the entry for the cached token. --> <CacheKey> <Prefix/> <KeyFragment>gcp_translate_token_</KeyFragment> </CacheKey> <Scope>Exclusive</Scope> <!-- Assign the retrieved token (if any) to a variable, where it can be retrieved by policies. --> <AssignTo>cloud.translation.auth.token</AssignTo> </LookupCache>
إذا لم تستردّ عملية البحث في ذاكرة التخزين المؤقت رمزًا مميّزًا مخزَّنًا مؤقتًا، تسترد سياسة ExtensionCallout رمز OAuth مميزًا جديدًا، مع تحديد واجهة برمجة التطبيقات Google Cloud Translation API كنطاق للرمز المميّز. تعرض Google Cloud رمزًا مميّزًا صالحًا إذا كانت بيانات اعتماد حساب الخدمة المستخدَمة عند ضبط الإضافة
Google-Auth-Callout
تمثّل عضوًا في المشروع لديه إذن الوصول إلى واجهة برمجة التطبيقات.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ConnectorCallout async="false" continueOnError="true" enabled="true" name="Google-Auth-Callout"> <DisplayName>Google-Auth-Callout</DisplayName> <Connector>example-auth-extension</Connector> <Action>getOauth2AccessToken</Action> <Input><![CDATA[{ "scope" : ["https://www.googleapis.com/auth/cloud-translation"] }]]></Input> <Output parsed="false">cloud.translation.auth.token</Output> </ConnectorCallout>
بعد أن تسترد سياسة ExtensionCallout رمزًا مميزًا جديدًا، تخزّنه سياسة Populatecache مؤقتًا هذا الرمز لاستخدامه لاحقًا من خلال السياسات في الخادم الوكيل لواجهة برمجة التطبيقات.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <PopulateCache async="false" continueOnError="false" enabled="true" name="Cache-Auth-Token"> <DisplayName>Cache Auth Token</DisplayName> <Properties/> <!-- Set cache key information to specify a unique key for this entry. --> <CacheKey> <Prefix/> <KeyFragment>gcp_translate_token_</KeyFragment> </CacheKey> <Scope>Exclusive</Scope> <ExpirySettings> <TimeoutInSec>5</TimeoutInSec> </ExpirySettings> <!-- Get the token to cache from the variable where the ExtensionCallout put it. --> <Source>cloud.translation.auth.token</Source> </PopulateCache>
المهام
getOauth2AccessToken
الحصول على رمز الدخول عبر OAuth 2.0. استخدم هذا الإجراء لدعم بروتوكول OAuth الثنائي بين الخادم الوكيل لواجهة برمجة التطبيقات وواجهات برمجة تطبيقات Google عندما تتطلب واجهات برمجة التطبيقات من Google رمز بروتوكول OAuth مميز.
في بروتوكول OAuth الثنائي، يسترد هذا الإجراء رمز OAuth المميز عن طريق المصادقة مع Google باستخدام JSON لحساب الخدمة (يمكنك إضافة JSON عند تهيئة هذه الإضافة). بعد أن يسترد هذا الإجراء رمز OAuth المميز، يمكن لخادم واجهة برمجة التطبيقات استخدام الرمز المميز لإجراء طلبات إلى Google APIs، مما يؤدي إلى استدعاء واجهات برمجة التطبيقات بفعالية نيابةً عن حساب خدمة Google.
تتم فلترة الوصول إلى واجهات Google Cloud API من خلال النطاقات المدرَجة في نطاقات OAuth 2.0 لخدمة Google APIs.
لمزيد من المعلومات حول تفاعلات خادم إلى خادم مع OAuth 2.0، يمكنك الاطلاع على استخدام OAuth 2.0 لتطبيقات الخادم إلى الخادم
البنية
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"scope1",
"scope2"
]
}]]></Input>
مثال
في المثال التالي، يسترد الإجراء getOauth2AccessToken
للإضافة رمزًا مميّزًا لاستخدامه في الطلبات إلى Cloud Translation API.
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"https://www.googleapis.com/auth/cloud-translation"
]
}]]></Input>
معلمات الطلب
المعلمة | الوصف | النوع | تلقائي | مطلوب |
---|---|---|---|---|
نطاق | مصفوفة من نطاقات OAuth 2.0. لمزيد من المعلومات عن النطاقات، يُرجى الاطّلاع على نطاقات OAuth 2.0 لواجهات Google APIs. | مصفوفة | ["https://www.googleapis.com/auth/cloud-platform"] ، تمنح هذه الجهة إمكانية الوصول إلى جميع واجهات برمجة التطبيقات التي يمكن لحساب الخدمة الوصول إليها. |
لا. |
الرد
عنصر يحتوي على رمز الدخول ونوعه وتاريخ انتهاء صلاحيته بالصيغة التالية:
{
"accessToken": "ewogICJ0eXB...C5jb20iCn0K",
"token_type": "Bearer",
"expiresInSec": 3600
}
خصائص الاستجابة
المعلمة | الوصف | تلقائي | مطلوب |
---|---|---|---|
accessToken | رمز الدخول إلى OAuth 2.0. | بدون تحديد نمط | نعم |
tokenType | نوع الرمز المميّز. | الحامل | نعم |
expiresInSec | عدد الثواني المتبقية على انتهاء صلاحية الرمز المميز. | 3600 | نعم |
getJWTAccessToken
للحصول على رمز الدخول المميز للويب JSON (JWT). يمكنك استخدام هذا الرمز المميز للمصادقة باستخدام Google APIs إذا كان لواجهة برمجة التطبيقات التي تريد طلبها تعريف خدمة منشور في مستودع Google APIs GitHub.
باستخدام بعض واجهات Google APIs، يمكنك إجراء طلبات بيانات معتمَدة من واجهة برمجة التطبيقات باستخدام JWT موقَّعًا بشكل مباشر كرمز حامل مميّز بدلاً من رمز الدخول عبر OAuth 2.0. وعندما يكون ذلك ممكنًا، يمكنك تجنب الاضطرار إلى تقديم طلب شبكة إلى خادم تفويض Google قبل إجراء طلب بيانات من واجهة برمجة التطبيقات.
لمزيد من المعلومات حول المصادقة باستخدام رمز الدخول JWT، يمكنك الاطّلاع على استخدام OAuth 2.0 لتطبيقات الخادم إلى الخادم.
البنية
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "audience"
}]]></Input>
مثال: عنوان URL لدالة Cloud
في المثال التالي، يسترد الإجراء getOauth2AccessToken
للإضافة رمزًا مميّزًا لاستخدامه في الطلبات إلى Cloud Translation API.
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/FUNCTION_NAME"
}]]></Input>
مثال: معرِّف عميل Cloud IAP الآمن
في المثال التالي، يسترد الإجراء getOauth2AccessToken
للإضافة رمزًا مميّزًا لاستخدامه في الطلبات إلى Cloud Translation API.
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "Cloud-IAP-secured-client-ID"
}]]></Input>
معلمات الطلب
المعلمة | الوصف | تلقائي | مطلوب |
---|---|---|---|
الجمهور | المستلِم المقصود للرمز المميّز. ويمكن أن يشمل ذلك معرِّف عميل آمن للشراء داخل التطبيق في السحابة الإلكترونية وعنوان URL لوظائف Cloud، وما إلى ذلك. | بدون تحديد نمط | نعم |
الرد
{
"accessToken": "token",
"tokenType": "Bearer",
"expiresInSec": 3600
}
خصائص الاستجابة
المعلمة | الوصف | تلقائي | مطلوب |
---|---|---|---|
accessToken | رمز الدخول. | بدون تحديد نمط | نعم |
tokenType | نوع الرمز المميّز. | الحامل | نعم |
expiresInSec | تنتهي صلاحية الدعوة خلال ثوانٍ. | 3600 | نعم |
مرجع الإعداد
يمكنك استخدام ما يلي عند إعداد هذه الإضافة ونشرها للاستخدام في الخوادم الوكيلة لواجهة برمجة التطبيقات. لمعرفة خطوات إعداد إضافة باستخدام وحدة تحكُّم Apigee، يُرجى الاطّلاع على إضافة إضافة وضبطها.
خصائص الإضافات الشائعة
السمات التالية متاحة لكل إضافة.
الموقع | الوصف | تلقائي | عنصر مطلوب |
---|---|---|---|
name |
الاسم الذي تُعطِه هذه الإضافة من الإضافات. | لا ينطبق | متوافق |
packageName |
اسم حزمة الإضافة كما هو مُوضَّح من Apigee Edge. | لا ينطبق | متوافق |
version |
رقم إصدار حزمة الإضافة التي تجري عملية إعداد الإضافة منها. | لا ينطبق | متوافق |
configuration |
قيمة الإعداد المتعلقة بالإضافة التي تدرجها الاطّلاع على خصائص حزمة الإضافات هذه | لا ينطبق | متوافق |
خصائص حزمة الإضافات هذه
حدِّد قيمًا لخصائص الضبط التالية الخاصة بهذه الإضافة.
الموقع | الوصف | تلقائي | مطلوب |
---|---|---|---|
بيانات الاعتماد | عند إدخالها في وحدة تحكُّم Apigee Edge، تكون هذه هي المحتوى الكامل لملف JSON لمفتاح حساب الخدمة. وعند إرسالها عبر واجهة برمجة التطبيقات للإدارة، تكون قيمة بترميز base64 يتم إنشاؤها من ملف JSON لمفتاح حساب الخدمة بالكامل. | بدون تحديد نمط | نعم |