شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
چی
خطمشی Verify API Key به شما امکان میدهد تأیید کلیدهای API را در زمان اجرا اجرا کنید و فقط برنامههایی که دارای کلیدهای API تأیید شده هستند به APIهای شما دسترسی داشته باشند. این خطمشی تضمین میکند که کلیدهای API معتبر هستند، باطل نشدهاند، و برای مصرف منابع خاص مرتبط با محصولات API شما تأیید شدهاند.
نمونه ها
پارامتر query را کلید بزنید
<VerifyAPIKey name="APIKeyVerifier"> <APIKey ref="request.queryparam.apikey" /> </VerifyAPIKey>
در این مثال، سیاست انتظار دارد که کلید API را در یک متغیر جریان به نام request.queryparam.apikey
پیدا کند. متغیر request.queryparam.{name}
یک متغیر جریان استاندارد Edge است که با مقدار پارامتر query ارسال شده در درخواست مشتری پر شده است.
دستور curl
زیر کلید API را در یک پارامتر query ارسال می کند:
curl http://myorg-test.apigee.net/mocktarget?apikey=IEYRtW2cb7A5Gs54A1wKElECBL65GVls
هدر را کلید بزنید
<VerifyAPIKey name="APIKeyVerifier"> <APIKey ref="request.header.x-apikey" /> </VerifyAPIKey>
در این مثال، سیاست انتظار دارد که کلید API را در یک متغیر جریان به نام request.header.x-apikey
پیدا کند. متغیر request.header.{name}
یک متغیر جریان استاندارد Edge است که با مقدار یک هدر ارسال شده در درخواست مشتری پر شده است.
CURL زیر نحوه ارسال کلید API را در هدر نشان می دهد:
curl "http://myorg-test.apigee.net/mocktarget" -H "x-apikey:IEYRtW2cb7A5Gs54A1wKElECBL65GVls"
کلید در متغیر
<VerifyAPIKey name="APIKeyVerifier"> <APIKey ref="requestAPIKey.key"/> </VerifyAPIKey>
خط مشی می تواند به هر متغیری که حاوی کلید باشد ارجاع دهد. خط مشی در این مثال کلید API را از متغیری به نام requestAPIKey.key استخراج می کند.
نحوه پر شدن آن متغیر به شما بستگی دارد. برای مثال، میتوانید از سیاست Extract Variables برای پر کردن requestAPIKey.key از یک پارامتر query به نام myKey استفاده کنید، همانطور که در زیر نشان داده شده است:
<ExtractVariables async="false" continueOnError="false" enabled="true" name="SetAPIKeyVar"> <Source>request</Source> <QueryParam name="myKey"> <Pattern ignoreCase="true">{key}</Pattern> </QueryParam> <VariablePrefix>requestAPIKey</VariablePrefix> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </ExtractVariables>
به متغیرهای جریان سیاست دسترسی داشته باشید
<AssignMessage async="false" continueOnError="false" enabled="true" name="accessverifyvars"> <AssignVariable> <Name>devFirstName</Name> <Ref>verifyapikey.verify-api-key.developer.firstName</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>devLastName</Name> <Ref>verifyapikey.verify-api-key.developer.lastName</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>devEmail</Name> <Ref>verifyapikey.verify-api-key.developer.email</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Edge به طور خودکار مجموعه ای از متغیرهای جریان را هنگام اجرای سیاست Verify API Key برای یک کلید API معتبر پر می کند. می توانید از این متغیرها برای دسترسی به اطلاعاتی مانند نام برنامه، شناسه برنامه و اطلاعات مربوط به توسعه دهنده یا شرکتی که برنامه را ثبت کرده است استفاده کنید. در مثال بالا، از خط مشی Assign Message برای دسترسی به نام، نام خانوادگی و آدرس ایمیل برنامهنویس پس از اجرای Verify API Key استفاده میکنید.
این متغیرها همه با پیشوند زیر هستند:
verifyapikey.{policy_name}
در این مثال، نام سیاست کلید Verify API " verify-api-key " است. بنابراین، شما با دسترسی به متغیر verifyapikey.verify-api-key.developer.firstName.
Edge را یاد بگیرید
درباره سیاست Verify API Key
هنگامی که یک توسعه دهنده برنامه ای را در Edge ثبت می کند، Edge به طور خودکار یک کلید مصرف کننده و جفت مخفی تولید می کند. میتوانید کلید مصرفکننده و جفت مخفی برنامه را در رابط کاربری Edge ببینید یا از Edge API به آنها دسترسی داشته باشید.
در زمان ثبت برنامه، توسعهدهنده یک یا چند محصول API را برای مرتبط کردن با برنامه انتخاب میکند، جایی که یک محصول API مجموعهای از منابع است که از طریق پراکسیهای API قابل دسترسی است. سپس توسعه دهنده کلید API (کلید مصرف کننده) را به عنوان بخشی از هر درخواست به یک API در یک محصول API مرتبط با برنامه ارسال می کند. برای اطلاعات بیشتر به نمای کلی انتشار مراجعه کنید.
از کلیدهای API می توان به عنوان نشانه های احراز هویت استفاده کرد، یا می توان از آنها برای به دست آوردن نشانه های دسترسی OAuth استفاده کرد. در OAuth از کلیدهای API به عنوان "شناسه مشتری" یاد می شود. نام ها را می توان به جای هم استفاده کرد. برای اطلاعات بیشتر به صفحه اصلی OAuth مراجعه کنید.
Edge به طور خودکار مجموعه ای از متغیرهای جریان را هنگام اجرای سیاست Verify API Key پر می کند. برای اطلاعات بیشتر به متغیرهای جریان زیر مراجعه کنید.
مرجع عنصر
در زیر عناصر و ویژگی هایی وجود دارد که می توانید در این خط مشی پیکربندی کنید:
<VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key-1"> <DisplayName>Custom label used in UI</DisplayName> <APIKey ref="variable_containing_api_key"/> </VerifyAPIKey>
ویژگی های <VerifyAPIKey>
مثال زیر ویژگی های تگ <VerifyAPIKey>
را نشان می دهد:
<VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key-1">
جدول زیر ویژگی هایی را توصیف می کند که برای همه عناصر اصلی خط مشی مشترک هستند:
صفت | توضیحات | پیش فرض | حضور |
---|---|---|---|
name | نام داخلی سیاست. مقدار مشخصه در صورت تمایل، از عنصر | N/A | مورد نیاز |
continueOnError | برای بازگرداندن خطا در صورت شکست خط مشی، روی روی | نادرست | اختیاری |
enabled | برای اجرای خط مشی روی برای خاموش کردن خط مشی، روی | درست است | اختیاری |
async | این ویژگی منسوخ شده است. | نادرست | منسوخ شده است |
عنصر <DisplayName>
علاوه بر ویژگی name
برای برچسبگذاری خطمشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.
<DisplayName>Policy Display Name</DisplayName>
پیش فرض | N/A اگر این عنصر را حذف کنید، از مقدار ویژگی |
---|---|
حضور | اختیاری |
تایپ کنید | رشته |
عنصر <APIKey>
این عنصر متغیر جریانی را که حاوی کلید API است را مشخص می کند. به طور معمول، کلاینت کلید API را در یک پارامتر پرس و جو، هدر HTTP یا یک پارامتر فرم ارسال می کند. به عنوان مثال، اگر کلید در یک هدر به نام x-apikey
ارسال شود، کلید در متغیر: request.header.x-apikey
یافت می شود.
پیش فرض | NA |
---|---|
حضور | مورد نیاز |
تایپ کنید | رشته |
صفات
جدول زیر ویژگی های عنصر <APIKey>
را شرح می دهد
صفت | توضیحات | پیش فرض | حضور |
---|---|---|---|
رجوع کنید | ارجاع به متغیری که حاوی کلید API است. فقط یک مکان در هر خط مشی مجاز است. | N/A | مورد نیاز |
نمونه ها
در این مثالها، کلید در پارامترها و هدری به نام x-apikey
ارسال میشود.
به عنوان پارامتر پرس و جو:
<VerifyAPIKey name="APIKeyVerifier"> <APIKey ref="request.queryparam.x-apikey"/> </VerifyAPIKey>
به عنوان هدر HTTP:
<VerifyAPIKey name="APIKeyVerifier"> <APIKey ref="request.header.x-apikey"/> </VerifyAPIKey>
به عنوان پارامتر فرم HTTP:
<VerifyAPIKey name="APIKeyVerifier"> <APIKey ref="request.formparam.x-apikey"/> </VerifyAPIKey>
طرحواره ها
متغیرهای جریان
وقتی یک خطمشی Verify API Key روی یک کلید API معتبر اعمال میشود، Edge مجموعهای از متغیرهای جریان را پر میکند. این متغیرها برای خطمشیها یا کدهایی که بعداً در جریان اجرا میشوند در دسترس هستند و اغلب برای انجام پردازش سفارشی بر اساس ویژگیهای کلید API مانند نام برنامه، محصول API مورد استفاده برای تأیید کلید یا ویژگیهای سفارشی API استفاده میشوند. کلید
این خط مشی انواع مختلفی از متغیرهای جریان را پر می کند، از جمله:
- ژنرال
- برنامه
- توسعه دهنده
- شرکت
- تجزیه و تحلیل
هر نوع متغیر جریان دارای پیشوند متفاوتی است. همه متغیرها اسکالر هستند به جز آنهایی که به طور خاص به عنوان آرایه نشان داده شده اند.
متغیرهای جریان عمومی
جدول زیر متغیرهای جریان عمومی را که توسط سیاست Verify API Key پر شده اند فهرست می کند. این متغیرها همه با پیشوند زیر هستند:
verifyapikey.{policy_name}
به عنوان مثال: verifyapikey.{policy_name}.client_id
متغیرهای موجود عبارتند از:
متغیر | توضیحات |
---|---|
client_id | کلید مصرف کننده (با نام مستعار کلید API یا کلید برنامه) ارائه شده توسط برنامه درخواست کننده. |
client_secret | راز مصرف کننده مرتبط با کلید مصرف کننده. |
redirection_uris | هر URI تغییر مسیر در درخواست. |
developer.app.id | شناسه برنامه توسعه دهنده درخواست کننده. |
developer.app.name | نام برنامه برنامهنویسی که درخواست میکند. |
developer.id | شناسه توسعه دهنده که به عنوان مالک برنامه درخواست کننده ثبت شده است. |
developer.{custom_attrib_name} | هر ویژگی سفارشی که از نمایه کلید برنامه مشتق شده است. |
DisplayName | مقدار ویژگی <DisplayName> خط مشی. |
failed | هنگامی که اعتبارسنجی کلید API ناموفق است، روی "درست" تنظیم کنید. |
{custom_app_attrib} | هر ویژگی سفارشی مشتق شده از نمایه برنامه. نام ویژگی سفارشی را مشخص کنید. |
apiproduct.name* | نام محصول API مورد استفاده برای تأیید درخواست. |
apiproduct.{custom_attrib_name}* | هر ویژگی سفارشی که از نمایه محصول API مشتق شده است. |
apiproduct.developer.quota.limit* | محدودیت سهمیه تعیین شده برای محصول API، در صورت وجود. |
apiproduct.developer.quota.interval* | فاصله سهمیه تعیین شده روی محصول API، در صورت وجود. |
apiproduct.developer.quota.timeunit* | واحد زمان سهمیه تنظیم شده روی محصول API، در صورت وجود. |
* اگر محصولات API با محیط، پراکسیها و منابع معتبر (مشتقشده از proxy.pathsuffix ) پیکربندی شوند، متغیرهای محصول API بهطور خودکار پر میشوند. برای دستورالعملهای مربوط به راهاندازی محصولات API، به استفاده از API مدیریت لبه برای انتشار APIها مراجعه کنید. |
متغیرهای جریان برنامه
متغیرهای جریان زیر حاوی اطلاعات مربوط به برنامه توسط خط مشی پر شده است. این متغیرها همه با پیشوند زیر هستند:
verifyapikey.{policy_name}.app
.
به عنوان مثال:
verifyapikey.{policy_name}.app.name
متغیرهای موجود عبارتند از:
متغیر | توضیحات |
---|---|
name | نام برنامه. |
id | شناسه برنامه |
accessType | استفاده نشده توسط Apigee. |
callbackUrl | URL بازگشت به تماس برنامه. معمولاً فقط برای OAuth استفاده می شود. |
DisplayName | نام نمایشی برنامه |
status | وضعیت برنامه، مانند "تأیید" یا "لغو". |
apiproducts | آرایه ای حاوی لیستی از محصولات API مرتبط با برنامه. |
appFamily | هر خانواده برنامه حاوی برنامه، یا "پیشفرض". |
appParentStatus | وضعیت والد برنامه، مانند «فعال» یا «غیرفعال» |
appType | نوع برنامه، به عنوان "شرکت" یا "توسعه دهنده". |
appParentId | شناسه برنامه والد. |
created_at | مهر تاریخ/زمان زمانی که برنامه ایجاد شد. |
created_by | آدرس ایمیل توسعه دهنده ای که برنامه را ایجاد کرده است. |
last_modified_at | مهر تاریخ/زمان آخرین بهروزرسانی برنامه. |
last_modified_by | آدرس ایمیل برنامهنویسی که آخرین بار برنامه را بهروزرسانی کرده است. |
{app_custom_attributes} | هر ویژگی برنامه سفارشی نام ویژگی سفارشی را مشخص کنید. |
متغیرهای جریان توسعه دهنده
متغیرهای جریان زیر حاوی اطلاعات مربوط به توسعهدهنده توسط خطمشی پر شدهاند. این متغیرها همه با پیشوند زیر هستند:
verifyapikey.{policy_name}.developer
به عنوان مثال:
verifyapikey.{policy_name}.developer.id
متغیرهای موجود عبارتند از:
متغیر | توضیحات |
---|---|
id | {org_name}@@@{developer_id} را برمیگرداند |
userName | نام کاربری توسعه دهنده. |
firstName | نام کوچک سازنده |
lastName | نام خانوادگی سازنده |
email | آدرس ایمیل توسعه دهنده |
status | وضعیت توسعه دهنده به عنوان فعال، غیرفعال یا login_lock. |
apps | مجموعه ای از برنامه های مرتبط با توسعه دهنده. |
created_at | مهر تاریخ/زمان زمانی که توسعه دهنده ایجاد شد. |
created_by | آدرس ایمیل کاربری که توسعه دهنده را ایجاد کرده است. |
last_modified_at | مهر تاریخ/زمان آخرین تغییر برنامهنویس. |
last_modified_by | آدرس ایمیل کاربری که توسعه دهنده را تغییر داده است. |
{developer_custom_attributes} | هر ویژگی توسعه دهنده سفارشی نام ویژگی سفارشی را مشخص کنید. |
Company | نام شرکت، در صورت وجود، مرتبط با توسعه دهنده. |
متغیرهای جریان شرکت
متغیرهای جریان زیر که حاوی اطلاعات مربوط به شرکت هستند توسط این خط مشی تکمیل می شوند. این متغیرها همه با پیشوند زیر هستند:
verifyapikey.{policy_name}.company
به عنوان مثال:
verifyapikey.{policy_name}.company.name
متغیرهای موجود عبارتند از:
متغیر | توضیحات |
---|---|
name | نام شرکت. |
displayName | نام نمایشی شرکت |
id | شناسه شرکت |
apps | آرایه ای حاوی لیست برنامه های شرکت. |
appOwnerStatus | وضعیت مالک برنامه، به عنوان فعال، غیرفعال یا login_lock. |
created_at | مهر تاریخ/زمان ایجاد شرکت. |
created_by | آدرس ایمیل کاربری که شرکت را ایجاد کرده است. |
last_modified_at | مهر تاریخ/زمان آخرین تغییر شرکت. |
last_modified_by | آدرس ایمیل کاربری که آخرین بار شرکت را تغییر داده است. |
{company_custom_attributes} | هر ویژگی سفارشی شرکت نام ویژگی سفارشی را مشخص کنید. |
متغیرهای تجزیه و تحلیل
هنگامی که یک خطمشی Verify API Key برای یک کلید API معتبر اجرا میشود، متغیرهای زیر بهطور خودکار در Analytics پر میشوند. این متغیرها فقط با خطمشی Verify API Key و سیاستهای OAuth پر میشوند.
متغیرها و مقادیر را میتوان بهعنوان ابعاد برای ساختن گزارشهای Analytics استفاده کرد تا الگوهای مصرف توسط توسعهدهندگان و برنامهها دیده شود.
- apiproduct.name
- developer.app.name
- client_id
- developer.id
مرجع خطا
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause |
---|---|---|
keymanagement.service.CompanyStatusNotActive |
401 | The Company associated with the Developer App that has the API key you are using has an inactive status. When a Company's status is set to inactive, you cannot access the developers or apps associated with that Company. An org admin can change a Company's status using the management API. See Set the Status of a Company. |
keymanagement.service.DeveloperStatusNotActive |
401 |
The developer who created the Developer App that has the API key you are using has an inactive status. When an App Developer's status is set to inactive, any Developer Apps created by that developer are deactivated. An admin user with appropriate permissions (such as Organization Administrator) can change a developer's status in the following ways:
|
keymanagement.service.invalid_client-app_not_approved |
401 | The Developer App associated with the API key is revoked. A revoked app cannot access any API products and cannot invoke any API managed by Apigee Edge. An org admin can change the status of a Developer App using the management API. See Approve or Revoke Developer App. |
oauth.v2.FailedToResolveAPIKey |
401 | The policy expects to find the API key in a variable that is specified in the policy's <APIKey> element. This error arises when the expected variable does not exist (it cannot be resolved). |
oauth.v2.InvalidApiKey |
401 | An API key was received by Edge, but it is invalid. When Edge looks up the key in its database, it must exactly match the on that was sent in the request. If the API worked previously, make sure the key was not regenerated. If the key was regenerated, you will see this error if you try to use the old key. For details, see Register apps and manage API keys. |
oauth.v2.InvalidApiKeyForGivenResource |
401 | An API key was received by Edge, and it is valid; however, it does not match an approved key in the Developer App associated with your API proxy through a Product. |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
Error name | Cause |
---|---|
SpecifyValueOrRefApiKey |
The <APIKey> element does not have a value or key specified. |
Fault variables
These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "FailedToResolveAPIKey" |
oauthV2.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.VK-VerifyAPIKey.failed = true |
Example error responses
{ "fault":{ "faultstring":"Invalid ApiKey", "detail":{ "errorcode":"oauth.v2.InvalidApiKey" } } }
{ "fault":{ "detail":{ "errorcode":"keymanagement.service.DeveloperStatusNotActive" }, "faultstring":"Developer Status is not Active" } }
Example fault rule
<FaultRule name="FailedToResolveAPIKey"> <Step> <Name>AM-FailedToResolveAPIKey</Name> </Step> <Condition>(fault.name Matches "FailedToResolveAPIKey") </Condition> </FaultRule>