سیاست VerifyAPIKey

شما در حال مشاهده اسناد 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

نام داخلی سیاست. مقدار مشخصه name می تواند شامل حروف، اعداد، فاصله، خط تیره، زیرخط و نقطه باشد. این مقدار نمی تواند بیش از 255 کاراکتر باشد.

در صورت تمایل، از عنصر <DisplayName> برای برچسب گذاری خط مشی در ویرایشگر پروکسی UI مدیریت با نامی به زبان طبیعی دیگر استفاده کنید.

N/A مورد نیاز
continueOnError

برای بازگرداندن خطا در صورت شکست خط مشی، روی false تنظیم کنید. این رفتار مورد انتظار برای اکثر سیاست ها است.

روی true تنظیم کنید تا اجرای جریان حتی پس از شکست خط مشی ادامه یابد.

نادرست اختیاری
enabled

برای اجرای خط مشی روی true تنظیم کنید.

برای خاموش کردن خط مشی، روی false تنظیم کنید. این سیاست حتی اگر به یک جریان وابسته باشد اجرا نخواهد شد.

درست است اختیاری
async

این ویژگی منسوخ شده است.

نادرست منسوخ شده است

عنصر <DisplayName>

علاوه بر ویژگی name برای برچسب‌گذاری خط‌مشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.

<DisplayName>Policy Display Name</DisplayName>
پیش فرض

N/A

اگر این عنصر را حذف کنید، از مقدار ویژگی name خط مشی استفاده می شود.

حضور اختیاری
تایپ کنید رشته

عنصر <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>

موضوعات مرتبط