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

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

الإصدار: 2.0.0

يمكنك المصادقة باستخدام 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 APIs، يمكنك إجراء طلبات واجهة برمجة تطبيقات مُصرَّح بها باستخدام رمز JWT موقَّع مباشرةً كرمز حامل، بدلاً من رمز الدخول عبر OAuth 2.0. عندما يكون ذلك ممكنًا، يمكنك تجنُّب إجراء طلب شبكة إلى خادم التفويض من Google قبل إجراء طلب بيانات من واجهة برمجة التطبيقات.

لمزيد من المعلومات عن المصادقة باستخدام رمز دخول JWT، يُرجى الاطّلاع على استخدام OAuth 2.0 لتطبيقات الخادم إلى الخادم.

البنية

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
    "audience" : "audience"
}]]></Input>

مثال: عنوان URL في Cloud Function

في المثال التالي، يستردّ الإجراء 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 نعم

مرجع الإعداد

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

سمات الإضافة الشائعة

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

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

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

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

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