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

أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

الإصدار: 2.0.2

المصادقة باستخدام Google من أجل الوصول إلى Google APIs التي تحدّدها

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

على سبيل المثال، في خادم وكيل لواجهة برمجة التطبيقات، يمكنك الحصول على رمز مميّز باستخدام هذا الامتداد، وتخزين الرمز مؤقتًا باستخدام سياسة PopulateCache، ثم تمرير الرمز باستخدام سياسة 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 and Access Management (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 رمزًا مميزًا جديدًا، تخزّنه سياسة 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 APIs عندما تتطلّب Google APIs رمز OAuth.

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

يتم فلترة الوصول إلى واجهات Google Cloud APIs من خلال النطاقات المُدرَجة في نطاقات 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 API، يمكنك إجراء طلبات API معتمَدة باستخدام رمز 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>

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

المَعلمة الوصف تلقائي مطلوب
الجمهور المستلم المقصود للرمز المميز يمكن أن يشمل ذلك رقم تعريف عميل محميًا بواسطة Cloud IAP، أو عنوان URL لـ Cloud Functions بدون نعم

الردّ

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

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

المَعلمة الوصف تلقائي مطلوب
accessToken رمز الدخول بدون نعم
tokenType نوع الرمز المميّز الحامل نعم
expiresInSec يشير هذا الحقل إلى مدة انتهاء الصلاحية بالثواني. 3600 نعم

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

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

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

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

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

سمات حزمة الإضافة هذه

حدِّد قيمًا لخصائص الإعداد التالية الخاصة بهذا الامتداد.

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