شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید . اطلاعات
نسخه: ۲.۰.۲
برای دسترسی به API های گوگل که مشخص میکنید، با گوگل احراز هویت کنید.
از این افزونه برای دریافت یک توکن (OAuth یا JWT) برای سرویسهای Google Cloud استفاده کنید، سپس از این توکن برای فراخوانیهای بعدی به API گوگل، مانند استفاده از سیاست ServiceCallout، استفاده کنید.
برای مثال، در یک پروکسی API، ممکن است یک توکن با این افزونه دریافت کنید، توکن را با استفاده از سیاست PopulateCache ذخیره کنید، سپس توکن را با استفاده از سیاست ServiceCallout ارسال کنید تا از درون یک جریان پروکسی API به سرویسهای Google Cloud دسترسی پیدا کنید.
پیشنیازها
این محتوا مرجعی برای پیکربندی و استفاده از این افزونه ارائه میدهد. قبل از استفاده از افزونه از یک پروکسی API با استفاده از خطمشی ExtensionCallout ، باید:
مطمئن شوید حسابی که افزونه از آن استفاده خواهد کرد - حسابی که با حساب سرویسی که برای اعتبارنامهها استفاده خواهید کرد نمایش داده میشود - به سرویسهای گوگل کلود که افزونه با آنها احراز هویت میشود، دسترسی داشته باشد.
از کنسول گوگل کلود برای ایجاد کلید برای حساب سرویس استفاده کنید .
هنگام افزودن و پیکربندی افزونه با استفاده از مرجع پیکربندی ، از محتویات فایل JSON کلید حساب سرویس حاصل استفاده کنید.
درباره احراز هویت با Google Cloud
این افزونه با نمایش یک عضو خاص تعریفشده در پروژه گوگل کلود شما، از گوگل کلود درخواست احراز هویت میکند. شما هنگام پیکربندی این افزونه از فایل JSON حساب سرویس آن عضو پروژه استفاده میکنید.
در نتیجه، این افزونه فقط به منابعی دسترسی خواهد داشت که آن عضو مجوز آن را دارد. به عبارت دیگر، احراز هویت موفقیتآمیز توسط این افزونه به تطابق بین مجوزهای اعطا شده در کنسول Google Cloud و دسترسی درخواست شده توسط افزونه (از طریق محدودهها یا مخاطبان) در زمان اجرا بستگی دارد.
بهطورکلی، مراحل احراز هویت شما برای دسترسی به APIها از این افزونه به شرح زیر خواهد بود:
مطمئن شوید که حساب سرویس عضوی که این افزونه نماینده آن است، به منبع گوگلی که میخواهید به آن دسترسی داشته باشید، دسترسی دارد. میتوانید از صفحه مدیریت هویت و دسترسی ابری (Cloud IAM) در کنسول ابری گوگل برای اعطای نقشها به عضو پروژهای که این افزونه نماینده آن است، استفاده کنید.
هنگام پیکربندی این افزونه، از کلید حساب سرویس آن عضو به صورت JSON استفاده کنید.
هنگام پیکربندی خطمشی 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 بازیابی کرده و آن را در payload پاسخ کپی میکند. این میتواند برای اشکالزدایی مفید باشد. در عمل، ممکن است نخواهید توکن را به کلاینت برگردانید.
<?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 سریعتر از دریافت یک توکن جدید خواهد بود. هنگامی که توکن ذخیره شده منقضی شد، یک توکن جدید بازیابی کنید و حافظه پنهان را با آن بهروزرسانی کنید.
کد زیر از یک نمونه پروکسی API، نحوه تنظیم و استفاده از یک توکن ذخیره شده برای فراخوانی 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 زیر تلاش میکند تا یک توکن را از حافظه پنهان دریافت کند. اگر توکن قبلاً دریافت و ذخیره شده باشد، این سیاست آن را برای استفاده توسط پروکسی API دریافت میکند.
<?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 جدید بازیابی میکند و API ترجمه Google Cloud را به عنوان محدوده توکن مشخص میکند. اگر اعتبارنامههای حساب سرویس استفادهشده هنگام پیکربندی افزونه
Google-Auth-Calloutنشاندهنده عضوی از پروژه باشد که به API دسترسی دارد، Google Cloud یک توکن معتبر برمیگرداند.<?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 آن را برای استفاده بعدی توسط سیاستهای موجود در پروکسی API، در حافظه پنهان (cache) ذخیره میکند.
<?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 دو مرحلهای بین پروکسی API و APIهای گوگل خود، زمانی که APIهای گوگل به توکن OAuth نیاز دارند، استفاده کنید.
در OAuth دو مرحلهای، این اقدام افزونه با احراز هویت با گوگل با استفاده از یک حساب سرویس JSON (شما هنگام پیکربندی این افزونه، JSON را اضافه میکنید) یک توکن OAuth را بازیابی میکند. به محض اینکه این اقدام توکن OAuth را بازیابی کند، پروکسی API شما میتواند از این توکن برای برقراری تماس با APIهای گوگل استفاده کند و عملاً APIها را از طرف حساب سرویس گوگل فراخوانی کند.
دسترسی به APIهای Google Cloud از طریق محدودههای فهرستشده در محدودههای OAuth 2.0 برای APIهای Google فیلتر میشود.
برای اطلاعات بیشتر در مورد تعاملات سرور به سرور با 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 برای APIهای گوگل مراجعه کنید. | آرایه | ["https://www.googleapis.com/auth/cloud-platform"] که دسترسی به تمام APIهایی را که حساب سرویس به آنها دسترسی دارد، اعطا میکند. | خیر. |
پاسخ
یک شیء حاوی توکن دسترسی، نوع آن و تاریخ انقضای آن به شکل زیر:
{
"accessToken": "ewogICJ0eXB...C5jb20iCn0K",
"token_type": "Bearer",
"expiresInSec": 3600
}
خواص پاسخ
| پارامتر | توضیحات | پیشفرض | مورد نیاز |
|---|---|---|---|
| accessToken | توکن دسترسی OAuth 2.0. | هیچکدام | بله |
| نوع توکن | نوع توکن. | حامل | بله |
| منقضی میشودInSec | تعداد ثانیهها تا انقضای توکن. | ۳۶۰۰ | بله |
دریافت JWTAccessToken
یک توکن دسترسی JSON web token (JWT) دریافت میکند. اگر API مورد نظر برای فراخوانی، تعریف سرویسی داشته باشد که در مخزن GitHub مربوط به APIهای گوگل منتشر شده باشد، میتوانید از این توکن برای احراز هویت با APIهای گوگل استفاده کنید.
با برخی از APIهای گوگل، میتوانید فراخوانیهای API مجاز را مستقیماً با استفاده از یک JWT امضا شده به عنوان یک توکن حامل، به جای یک توکن دسترسی OAuth 2.0، انجام دهید. در صورت امکان، میتوانید از ارسال درخواست شبکه به سرور مجوز گوگل قبل از برقراری فراخوانی API جلوگیری کنید.
برای اطلاعات بیشتر در مورد احراز هویت با توکن دسترسی JWT، به بخش «استفاده از OAuth 2.0 برای برنامههای سرور به سرور» مراجعه کنید.
نحو
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "audience"
}]]></Input>
مثال: آدرس تابع ابری
در مثال زیر، اکشن getOauth2AccessToken افزونه، یک توکن را برای استفاده در درخواستهای ارسالی به Cloud Translation API بازیابی میکند.
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/FUNCTION_NAME"
}]]></Input>
مثال: شناسه کلاینت امنشده با IAP ابری
در مثال زیر، اکشن getOauth2AccessToken افزونه، یک توکن را برای استفاده در درخواستهای ارسالی به Cloud Translation API بازیابی میکند.
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "Cloud-IAP-secured-client-ID"
}]]></Input>
پارامترهای درخواست
| پارامتر | توضیحات | پیشفرض | مورد نیاز |
|---|---|---|---|
| مخاطب | گیرنده مورد نظر توکن. این میتواند شامل یک شناسه کلاینت امنشده توسط Cloud IAP، یک URL توابع ابری باشد. | هیچکدام | بله |
پاسخ
{
"accessToken": "token",
"tokenType": "Bearer",
"expiresInSec": 3600
}
خواص پاسخ
| پارامتر | توضیحات | پیشفرض | مورد نیاز |
|---|---|---|---|
| accessToken | توکن دسترسی. | هیچکدام | بله |
| نوع توکن | نوع توکن. | حامل | بله |
| منقضی میشودInSec | انقضا بر حسب ثانیه. | ۳۶۰۰ | بله |
مرجع پیکربندی
هنگام پیکربندی و استقرار این افزونه برای استفاده در پروکسیهای API، از موارد زیر استفاده کنید. برای مراحل پیکربندی یک افزونه با استفاده از کنسول Apigee، به بخش افزودن و پیکربندی یک افزونه مراجعه کنید.
ویژگیهای افزونههای رایج
ویژگی های زیر برای هر افزونه وجود دارد.
| ویژگی | شرح | پیش فرض | ضروری |
|---|---|---|---|
name | نامی که به این پیکربندی افزونه میدهید. | هیچ یک | آره |
packageName | نام بسته افزودنی همانطور که توسط Apigee Edge داده شده است. | هیچ یک | آره |
version | شماره نسخه بسته برنامه افزودنی که از آن یک برنامه افزودنی را پیکربندی می کنید. | هیچ یک | آره |
configuration | مقدار پیکربندی مخصوص افزونه ای که اضافه می کنید. به ویژگی های این بسته برنامه افزودنی مراجعه کنید | هیچ یک | آره |
ویژگیهای این بسته الحاقی
مقادیر مربوط به ویژگیهای پیکربندی زیر را که مختص این افزونه هستند، مشخص کنید.
| ملک | توضیحات | پیشفرض | مورد نیاز |
|---|---|---|---|
| اعتبارنامهها | وقتی در کنسول Apigee Edge وارد میشود، این کل محتوای فایل JSON کلید حساب سرویس شماست. وقتی با استفاده از API مدیریت ارسال میشود، یک مقدار کدگذاری شده با base64 است که از کل فایل JSON کلید حساب سرویس تولید میشود. | هیچکدام | بله |