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

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

الإصدار: 2.0.0

مصادقة حسابك على Google من أجل الوصول إلى واجهات برمجة تطبيقات Google التي تحدّدها

استخدِم هذه الإضافة للحصول على رمز مميّز (OAuth أو JWT) لخدمات Google Cloud، ثم استخدِم الرمز المميّز لإجراء عمليات استدعاء لاحقة لواجهة برمجة تطبيقات Google، مثل استخدام سياسة 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 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، يمكنك إجراء طلبات مفوَّضة لواجهات برمجة التطبيقات باستخدام ملف 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 Identity Access Protocol

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

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

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

المَعلمة الوصف تلقائي مطلوب
الجمهور المستلِم المقصود للرمز المميّز. ويمكن أن يشمل ذلك رقم تعريف عميل آمنًا من Cloud Identity and Access Management (إدارة الهوية والوصول في السحابة الإلكترونية) وعنوان URL لخدمة Cloud Functions وما إلى ذلك. بدون نعم

الردّ

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

سمات الاستجابة

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

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

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

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

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

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

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

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

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