إضافة مصادقة Google

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

الإصدار: 1.0.2

عليك المصادقة مع Google للوصول إلى Google APIs التي تحدّدها.

يمكنك استخدام هذه الإضافة للحصول على رمز مميّز (OAuth أو JWT) لخدمات Google Cloud، ثم استخدام الرمز المميّز لعمليات الاتصال اللاحقة بواجهة Google API، مثل استخدام سياسة ServiceCallout.

على سبيل المثال، في الخادم الوكيل لواجهة برمجة التطبيقات، قد تحصل على رمز مميّز مع هذه الإضافة، واحتفظ بالرمز المميّز في ذاكرة التخزين المؤقت باستخدام سياسة تعبئة ذاكرة التخزين المؤقت، ثم مرِّر الرمز المميّز من خلال سياسة ServiceCallout للوصول إلى خدمات Google Cloud من داخل مسار الخادم الوكيل لواجهة برمجة التطبيقات.

المتطلبات الأساسية

يوفر هذا المحتوى مرجعًا لضبط هذه الإضافة واستخدامها. قبل استخدام الإضافة من خادم وكيل لواجهة برمجة التطبيقات باستخدام سياسة ExtensionCallout، يجب عليك:

  1. تأكَّد من أنّ الحساب الذي ستستخدمه الإضافة، وهو الحساب الذي يمثّله حساب الخدمة الذي ستستخدمه لبيانات الاعتماد، يمكنه الوصول إلى خدمات Google Cloud التي ستتم المصادقة عليها باستخدام الإضافة.

  2. استخدام Google Cloud Console لإنشاء مفتاح لحساب الخدمة

  3. استخدِم محتوى ملف JSON لمفتاح حساب الخدمة الناتج عند إضافة الإضافة وضبطها باستخدام مرجع الإعدادات.

لمحة عن المصادقة باستخدام Google Cloud

تطلب هذه الإضافة المصادقة من Google Cloud من خلال تمثيل عضو محدّد في مشروع Google Cloud. ويمكنك استخدام ملف JSON لحساب الخدمة لعضو المشروع هذا عند ضبط هذه الإضافة.

ونتيجة لذلك، ستتمكن هذه الإضافة من الوصول إلى الموارد التي يملك هذا العضو الإذن لها فقط. بمعنى آخر، تعتمد المصادقة الناجحة من خلال هذه الإضافة على المطابقة بين الأذونات الممنوحة في Google Cloud Console وإذن الوصول الذي تطلبه الإضافة (من خلال النطاقات أو الجمهور) في وقت التشغيل.

بشكل عام، ستكون خطوات المصادقة للوصول إلى واجهات برمجة التطبيقات من هذه الإضافة كما يلي:

  1. تأكَّد من أنّ حساب خدمة الأعضاء الذي تمثّله هذه الإضافة لديه إذن الوصول إلى مورِّد Google الذي تريد الوصول إليه. يمكنك استخدام صفحة Cloud Identity وإدارة الوصول (Cloud IAM) في Google Cloud Console لمنح الأدوار لعضو المشروع الذي تمثله هذه الإضافة.

  2. يمكنك استخدام مفتاح JSON لحساب الخدمة لهذا العضو عند ضبط هذه الإضافة.

  3. عند تهيئة سياسة 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>
  1. تحاول سياسة 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>
    
  2. إذا لم يسترد بحث ذاكرة التخزين المؤقت الرمز المميّز المخزَّن مؤقتًا، تسترد سياسة 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>
    
  3. بعد أن تسترد سياسة ExtensionCallout رمزًا مميزًا جديدًا، تخزّنه سياسة تعبئة ذاكرة التخزين المؤقت مؤقتًا لاستخدامها لاحقًا من خلال السياسات في الخادم الوكيل لواجهة برمجة التطبيقات.

      <?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 APIs عندما تتطلب واجهات برمجة تطبيقات Google رمز OAuth مميز.

في بروتوكول OAuth الثنائي، يسترد إجراء الإضافة هذا رمز OAuth المميز من خلال المصادقة مع Google باستخدام حساب خدمة JSON (تضيف ملف JSON هذا عند ضبط هذه الإضافة). بعد أن يسترد هذا الإجراء رمز OAuth المميز، يمكن للخادم الوكيل لواجهة برمجة التطبيقات استخدام الرمز المميز لإجراء اتصالات بواجهات برمجة تطبيقات Google، واستدعاء واجهات برمجة التطبيقات بشكل فعّال نيابةً عن حساب خدمة Google.

تتم فلترة الوصول إلى Google Cloud APIs من خلال النطاقات المُدرَجة في نطاقات OAuth 2.0 لواجهات Google APIs.

للحصول على مزيد من المعلومات حول تفاعلات خادم إلى خادم باستخدام OAuth 2.0، يُرجى الاطّلاع على استخدام 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>

مَعلمات الطلب

المَعلمة الوصف Type تلقائي مطلوبة
نطاق مصفوفة من نطاقات 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 عدد الثواني المتبقية حتى انتهاء صلاحية الرمز المميّز 3,600 نعم

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 لدالة السحابة الإلكترونية

في المثال التالي، يسترد الإجراء getOauth2AccessToken للإضافة رمزًا مميزًا لاستخدامه في طلبات Cloud Translation API.

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
  "audience" : "https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/FUNCTION_NAME"
}]]></Input>

مثال: معرّف العميل الآمن للشراء داخل التطبيق في السحابة الإلكترونية

في المثال التالي، يسترد الإجراء getOauth2AccessToken للإضافة رمزًا مميزًا لاستخدامه في طلبات Cloud Translation API.

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
  "audience" : "Cloud-IAP-secured-client-ID"
}]]></Input>

مَعلمات الطلب

المَعلمة الوصف تلقائي مطلوبة
الجمهور المستلِم المقصود للرمز المميّز. ويمكن أن يتضمّن ذلك معرِّف عميل آمنًا للشراء داخل التطبيق في السحابة الإلكترونية وعنوان URL لوظائف السحابة الإلكترونية وما إلى ذلك. لا ينطبق نعم

الإجابة

{
  "accessToken": "token",
  "tokenType": "Bearer",
  "expiresInSec": 3600
}

خصائص الاستجابة

المَعلمة الوصف تلقائي مطلوبة
accessToken رمز الدخول. لا ينطبق نعم
tokenType نوع الرمز المميّز الحامل نعم
expiresInSec تنتهي صلاحية العرض خلال ثوانٍ. 3,600 نعم

مرجع الإعدادات

استخدِم ما يلي عند ضبط هذه الإضافة ونشرها للاستخدام في الخوادم الوكيلة لواجهة برمجة التطبيقات. لمعرفة خطوات إعداد إضافة باستخدام وحدة تحكُّم Apigee، يُرجى الاطّلاع على إضافة إضافة وضبطها.

خصائص الإضافات الشائعة

السمات التالية متاحة لكل إضافة.

الموقع الوصف تلقائي عنصر مطلوب
name الاسم الذي تُعطِه هذه الإضافة من الإضافات. لا ينطبق متوافق
packageName اسم حزمة الإضافة كما هو مُوضَّح من Apigee Edge. لا ينطبق متوافق
version رقم إصدار حزمة الإضافة التي تجري عملية إعداد الإضافة منها. لا ينطبق متوافق
configuration قيمة الإعداد المتعلقة بالإضافة التي تدرجها الاطّلاع على خصائص حزمة الإضافات هذه لا ينطبق متوافق

الخصائص لحزمة الإضافات هذه

يمكنك تحديد قيم لخصائص الإعداد التالية الخاصة بهذه الإضافة.

الموقع الوصف تلقائي مطلوبة
بيانات الاعتماد عند إدخال الرمز في وحدة تحكُّم Apigee Edge، سيتضمّن هذا الملف المحتوى الكامل لملف JSON لمفتاح حساب الخدمة. وعند إرسالها من خلال واجهة برمجة تطبيقات الإدارة، تكون القيمة بترميز base64 يتم إنشاؤها من ملف JSON لمفتاح حساب الخدمة بالكامل. لا ينطبق نعم