شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
چی
ویژگیهای نشانههای دسترسی، نشانههای تازهسازی، کدهای مجوز، و ویژگیهای برنامه مشتری را دریافت میکند و متغیرها را با مقادیر آن ویژگیها پر میکند.
این خطمشی زمانی مفید است که شما نیاز به پیکربندی رفتار مشروط و پویا بر اساس مقداری در یک رمز یا کد اعتبار دارید. هر زمان که اعتبار سنجی توکن رخ می دهد، متغیرها به طور خودکار با مقادیر ویژگی های نشانه پر می شوند. با این حال، در مواردی که اعتبار سنجی توکن رخ نداده است، میتوانید از این ویژگی برای پر کردن صریح متغیرها با مقادیر ویژگی یک نشانه استفاده کنید. همچنین به سفارشی کردن رمزها و کدهای مجوز مراجعه کنید.
یک نشانه دسترسی که به این خطمشی ارسال میکنید باید معتبر باشد، در غیر این صورت خطمشی خطای invalid_access_token
ایجاد میکند.
نمونه ها
نمونههای زیر از خطمشی Get OAuth V2 Info برای بازیابی اطلاعات مربوط به اجزای مختلف گردش کار OAuth2 و سپس دسترسی به اطلاعات درون کد استفاده میکنند.
نشانه دسترسی
برای دریافت ارجاع به نشانه دسترسی، از عنصر <AccessToken>
در خط مشی خود استفاده کنید.
مثال زیر انتظار دارد که نشانه دسترسی را در یک پارامتر پرس و جو به نام "access_token" پیدا کند (جزئیات پیاده سازی واقعی به شما بستگی دارد):
<GetOAuthV2Info name="MyTokenAttrsPolicy"> <AccessToken ref="request.queryparam.access_token"></AccessToken> </GetOAuthV2Info>
با توجه به نشانه دسترسی، خط مشی نمایه نشانه را جستجو می کند و مجموعه ای از متغیرها را با داده های نمایه پر می کند.
سپس می توانید با استفاده از جاوا اسکریپت یا ابزار دیگری به متغیرها دسترسی داشته باشید. مثال زیر محدوده (های) مرتبط با نشانه دسترسی را با استفاده از جاوا اسکریپت بازیابی می کند:
var scope = context.getVariable('oauthv2accesstoken.MyTokenAttrsPolicy.scope');
توجه داشته باشید که برای دسترسی به آن متغیرها در کد، باید پیشوند آنها را با "oauthv2accesstoken" قرار دهید. برای فهرست کاملی از متغیرهای موجود از طریق نشانه دسترسی، به متغیرهای نشانه دسترسی مراجعه کنید.
کد احراز هویت
برای دریافت ویژگی های کد مجوز، از عنصر <AuthorizationCode>
در خط مشی خود استفاده کنید.
مثال زیر انتظار دارد که نشانه دسترسی را در یک پارامتر فرم به نام "کد" پیدا کند (جزئیات پیاده سازی واقعی به شما بستگی دارد):
<GetOAuthV2Info name="MyAuthCodeAttrsPolicy"> <AuthorizationCode ref="request.formparam.code"></AuthorizationCode> </GetOAuthV2Info>
با توجه به کد تأیید، خط مشی اطلاعات کد را جستجو می کند و مجموعه ای از متغیرها را با داده های کد تأیید پر می کند.
سپس می توانید با استفاده از جاوا اسکریپت یا ابزار دیگری به متغیرها دسترسی داشته باشید. مثال زیر یک ویژگی سفارشی مرتبط با کد مجوز را با استفاده از جاوا اسکریپت بازیابی می کند:
var attr = context.getVariable(‘oauthv2authcode.MyAuthCodeAttrsPolicy.custom_attribute_name’);
توجه داشته باشید که برای دسترسی به آن متغیرها در کد، باید پیشوند آنها را با "oauthv2authcode" قرار دهید. برای فهرست کاملی از متغیرهای موجود از طریق کد اعتبار، به متغیرهای کد مجوز مراجعه کنید.
نشانه تازه کردن
برای دریافت ویژگیهای نشانه رفرش، از عنصر <RefreshToken>
در خطمشی خود استفاده کنید.
مثال زیر انتظار دارد که نشانه دسترسی را در یک پارامتر پرس و جو به نام "refresh_token" پیدا کند (جزئیات پیاده سازی واقعی به شما بستگی دارد):
<GetOAuthV2Info name="MyRefreshTokenAttrsPolicy"> <RefreshToken ref="request.queryparam.refresh_token"/> </GetOAuthV2Info>
با توجه به نشانه بازخوانی، این خط مشی اطلاعات نشانه بهروزرسانی را جستجو میکند و مجموعهای از متغیرها را با دادههای نشانه تازهسازی پر میکند.
سپس می توانید با استفاده از جاوا اسکریپت یا ابزار دیگری به آن متغیرها دسترسی داشته باشید. مثال زیر یک ویژگی سفارشی مرتبط با توکن refresh را با استفاده از جاوا اسکریپت بازیابی می کند:
var attr = context.getVariable(‘oauthv2refreshtoken.MyRefreshTokenAttrsPolicy.accesstoken.custom_attribute_name’);
توجه داشته باشید که برای دسترسی به متغیرهای موجود در کد، باید پیشوند آنها را با "oauthv2refreshtoken" قرار دهید. برای فهرست کاملی از متغیرهای موجود از طریق نشانه رفرش، به متغیرهای نشانه بازخوانی مراجعه کنید.
استاتیک
در برخی موارد نادر ممکن است نیاز داشته باشید که نمایه یک توکن با پیکربندی ایستا (که از طریق یک متغیر قابل دسترسی نیست) را دریافت کنید. شما می توانید این کار را با ارائه مقدار نشانه دسترسی به عنوان یک عنصر انجام دهید.
<GetOAuthV2Info name="GetTokenAttributes"> <AccessToken>shTUmeI1geSKin0TODcGLXBNe9vp</AccessToken> </GetOAuthV2Info>
میتوانید این کار را با انواع دیگر توکنها (شناسه مشتری، کد مجوز، و توکنهای تازهسازی) نیز انجام دهید.
شناسه مشتری
این مثال نحوه بازیابی اطلاعات مربوط به برنامه مشتری را با استفاده از شناسه مشتری نشان می دهد. پس از اجرا، این خط مشی مجموعه ای از متغیرها را با اطلاعات مشتری پر می کند. در این مورد، خط مشی انتظار دارد شناسه سرویس گیرنده را در یک پارامتر پرس و جو به نام client_id
بیابد. با توجه به شناسه مشتری، این خط مشی نمایه مشتری را جستجو می کند و مجموعه ای از متغیرها را با داده های نمایه پر می کند. متغیرها با پیشوند oauthv2client.
<GetOAuthV2Info name="GetClientAttributes"> <ClientId ref="request.queryparam.client_id"></ClientId> </GetOAuthV2Info>
سپس می توانید با استفاده از جاوا اسکریپت یا ابزار دیگری به متغیرها دسترسی داشته باشید. به عنوان مثال، برای دریافت نام برنامه توسعه دهنده و ایمیل توسعه دهنده مرتبط با برنامه مشتری با استفاده از جاوا اسکریپت:
context.getVariable("oauthv2client.GetClientAttributes.developer.email"); context.getVariable("oauthv2client.GetClientAttributes.developer.app.name");
مرجع عنصر
مرجع عنصر عناصر و ویژگی های خط مشی GetOAuthV2Info را توصیف می کند.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <GetOAuthV2Info async="false" continueOnError="false" enabled="true" name="GetOAuthV2Info-1" <DisplayName>Get OAuth v2.0 Info 1</DisplayName> <AccessToken ref="variable"></AccessToken> <AuthorizationCode ref="variable"></AuthorizationCode> <ClientId ref="variable"></ClientId> <RefreshToken ref="variable"></RefreshToken> </GetOAuthV2Info>
ویژگی های <GetOAuthV2Info>
<GetOAuthV2Info async="false" continueOnError="false" enabled="true" name="Get-OAuth-v20-Info-1">
جدول زیر ویژگی هایی را توصیف می کند که برای همه عناصر اصلی خط مشی مشترک هستند:
صفت | توضیحات | پیش فرض | حضور |
---|---|---|---|
name | نام داخلی سیاست. مقدار مشخصه در صورت تمایل، از عنصر | N/A | مورد نیاز |
continueOnError | برای بازگرداندن خطا در صورت شکست خط مشی، روی روی | نادرست | اختیاری |
enabled | برای اجرای خط مشی روی برای خاموش کردن خط مشی، روی | درست است | اختیاری |
async | این ویژگی منسوخ شده است. | نادرست | منسوخ شده است |
عنصر <DisplayName>
علاوه بر ویژگی name
برای برچسبگذاری خطمشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.
<DisplayName>Policy Display Name</DisplayName>
پیش فرض | N/A اگر این عنصر را حذف کنید، از مقدار ویژگی |
---|---|
حضور | اختیاری |
تایپ کنید | رشته |
عنصر <AccessToken>
نمایه را برای یک نشانه دسترسی بازیابی می کند. شما متغیری را که شامل رشته نشانه دسترسی است یا یک رشته نشانه تحت اللفظی (مورد نادر) را وارد می کنید. در این مثال، نشانه دسترسی از یک پارامتر query ارسال شده در یک درخواست بازیابی می شود. اگر میخواهید اطلاعات یک توکن باطل شده یا منقضی شده را برگردانید، از عنصر <IgnoreAccessTokenStatus> استفاده کنید.
<AccessToken ref="request.queryparam.access_token"></AccessToken>
پیش فرض: | request.formparam.access_token (یک x-www-form-urlencoded و مشخص شده در بدنه درخواست) |
حضور: | اختیاری |
نوع: | رشته |
مقادیر معتبر: | یا یک متغیر جریان حاوی یک رشته نشانه دسترسی یا یک رشته تحت اللفظی. |
عنصر <AuthorizationCode>
نمایه یک کد مجوز را بازیابی می کند. شما متغیری را که شامل رشته کد auth یا یک رشته رمز واقعی (مورد نادر) است را وارد می کنید. در این مثال، کد auth از یک پارامتر query ارسال شده در یک درخواست بازیابی می شود. برای لیستی از متغیرهای پر شده توسط این عملیات، به " متغیرهای جریان " مراجعه کنید.
<AuthorizationCode ref="request.queryparam.authorization_code"></AuthorizationCode>
پیش فرض: | request.formparam.access_token (یک x-www-form-urlencoded و مشخص شده در بدنه درخواست) |
حضور: | اختیاری |
نوع: | رشته |
مقادیر معتبر: | یا یک متغیر جریان حاوی یک رشته کد auth یا یک رشته تحت اللفظی. |
عنصر <ClientId>
اطلاعات مربوط به شناسه مشتری را بازیابی می کند. در این مثال، شناسه مشتری از یک پارامتر پرس و جو که در یک درخواست ارسال شده است، بازیابی می شود. برای لیستی از متغیرهای پر شده توسط این عملیات، به " متغیرهای جریان " مراجعه کنید.
<ClientId ref="request.queryparam.client_id"></ClientId>
پیش فرض: | request.formparam.access_token (یک x-www-form-urlencoded و مشخص شده در بدنه درخواست) |
حضور: | اختیاری |
نوع: | رشته |
مقادیر معتبر: | یا یک متغیر جریان حاوی یک رشته کد auth یا یک رشته تحت اللفظی. |
عنصر <IgnoreAccessTokenStatus>
حتی اگر توکن منقضی یا باطل شده باشد، اطلاعات رمز را برمیگرداند. این عنصر فقط با توکن های دسترسی قابل استفاده است. اطلاعات سایر نهادها مانند نشانههای تازهسازی و کدهای مجوز بدون در نظر گرفتن وضعیت آنها، به طور پیشفرض بازگردانده میشوند.
<IgnoreAccessTokenStatus>true</IgnoreAccessTokenStatus>
پیش فرض: | نادرست |
حضور: | اختیاری |
نوع: | بولی |
مقادیر معتبر: | درست یا نادرست |
عنصر <RefreshToken>
نمایه را برای یک نشانه تازهسازی بازیابی میکند. شما متغیری را که شامل رشته نشانه رفرش است یا یک رشته توکن تحت اللفظی (مورد نادر) را وارد می کنید. در این مثال، نشانه refresh از یک پارامتر query ارسال شده در یک درخواست بازیابی می شود. برای لیستی از متغیرهای پر شده توسط این عملیات، به " متغیرهای جریان " مراجعه کنید.
<RefreshToken ref="request.queryparam.refresh_token"></RefreshToken>
پیش فرض: | request.formparam.access_token (یک x-www-form-urlencoded و مشخص شده در بدنه درخواست) |
حضور: | اختیاری |
نوع: | رشته |
مقادیر معتبر: | یا یک متغیر جریان حاوی یک رشته رمز تازه یا یک رشته واقعی. |
متغیرهای جریان
خطمشی GetOAuthV2Info این متغیرها را پر میکند و معمولاً در مواردی استفاده میشود که به دادههای نمایه نیاز دارید، اما در مواردی که هنوز کمک مالی یا اعتبارسنجی صورت نگرفته است. .
متغیرهای شناسه مشتری
زمانی که عنصر ClientId تنظیم شده باشد، این متغیرها پر می شوند:
oauthv2client.{policy_name}.client_id oauthv2client.{policy_name}.client_secret oauthv2client.{policy_name}.redirection_uris // Note the spelling -- 'redirection_uris' oauthv2client.{policy_name}.developer.email oauthv2client.{policy_name}.developer.app.name oauthv2client.{policy_name}.developer.id oauthv2client.{policy_name}.{developer_app_custom_attribute_name}
دسترسی به متغیرهای رمز
زمانی که عنصر AccessToken تنظیم شده باشد، این متغیرها پر می شوند:
oauthv2accesstoken.{policy_name}.developer.id oauthv2accesstoken.{policy_name}.developer.app.name oauthv2accesstoken.{policy_name}.developer.app.id oauthv2accesstoken.{policy_name}.developer.email oauthv2accesstoken.{policy_name}.organization_name oauthv2accesstoken.{policy_name}.api_product_list oauthv2accesstoken.{policy_name}.access_token oauthv2accesstoken.{policy_name}.scope oauthv2accesstoken.{policy_name}.expires_in //in seconds oauthv2accesstoken.{policy_name}.status oauthv2accesstoken.{policy_name}.client_id oauthv2accesstoken.{policy_name}.accesstoken.{custom_attribute_name} oauthv2accesstoken.{policy_name}.refresh_token oauthv2accesstoken.{policy_name}.refresh_token_status oauthv2accesstoken.{policy_name}.refresh_token_expires_in //in seconds oauthv2accesstoken.{policy_name}.refresh_count oauthv2accesstoken.{policy_name}.refresh_token_issued_at oauthv2accesstoken.{policy_name}.revoke_reason //Apigee hybrid only with value of REVOKED_BY_APP, REVOKED_BY_ENDUSER, REVOKED_BY_APP_ENDUSER, or TOKEN_REVOKED
متغیرهای کد مجوز
زمانی که عنصر AuthorizationCode تنظیم شود، این متغیرها پر می شوند:
oauthv2authcode.{policy_name}.code oauthv2authcode.{policy_name}.scope oauthv2authcode.{policy_name}.redirect_uri oauthv2authcode.{policy_name}.client_id oauthv2authcode.{policy_name}.{auth_code_custom_attribute_name}
متغیرهای رمز را تازه کنید
زمانی که عنصر RefreshToken تنظیم شده باشد، این متغیرها پر می شوند:
oauthv2refreshtoken.{policy_name}.developer.id oauthv2refreshtoken.{policy_name}.developer.app.name oauthv2refreshtoken.{policy_name}.developer.app.id oauthv2refreshtoken.{policy_name}.developer.email oauthv2refreshtoken.{policy_name}.organization_name oauthv2refreshtoken.{policy_name}.api_product_list oauthv2refreshtoken.{policy_name}.access_token oauthv2refreshtoken.{policy_name}.scope oauthv2refreshtoken.{policy_name}.expires_in //in seconds oauthv2refreshtoken.{policy_name}.status oauthv2refreshtoken.{policy_name}.client_id oauthv2refreshtoken.{policy_name}.accesstoken.{custom_attribute_name} oauthv2refreshtoken.{policy_name}.refresh_token oauthv2refreshtoken.{policy_name}.refresh_token_status oauthv2refreshtoken.{policy_name}.refresh_token_expires_in //in seconds oauthv2refreshtoken.{policy_name}.refresh_count oauthv2refreshtoken.{policy_name}.refresh_token_issued_at oauthv2refreshtoken.{policy_name}.revoke_reason //Apigee hybrid only with value of REVOKED_BY_APP, REVOKED_BY_ENDUSER, REVOKED_BY_APP_ENDUSER, or TOKEN_REVOKED
طرحواره
هر نوع خط مشی توسط یک طرح XML ( .xsd
) تعریف می شود. برای مرجع، طرحهای خطمشی در GitHub در دسترس هستند.
مرجع خطا
این بخش کدهای خطا و پیامهای خطایی را که برگردانده میشوند و متغیرهای خطا را که توسط Edge تنظیم میشوند، هنگامی که این خطمشی خطا را راهاندازی میکند، توضیح میدهد. این اطلاعات برای دانستن اینکه آیا در حال توسعه قوانین خطا برای رسیدگی به خطاها هستید، مهم است. برای کسب اطلاعات بیشتر، آنچه را که باید در مورد خطاهای خط مشی و مدیریت خطاها بدانید را ببینید.
خطاهای زمان اجرا
این خطاها ممکن است هنگام اجرای سیاست رخ دهند. نام خطاهای نشان داده شده در زیر رشته هایی هستند که در صورت بروز خطا به متغیر fault.name
اختصاص داده می شوند. برای جزئیات بیشتر به بخش متغیرهای خطا در زیر مراجعه کنید.
کد خطا | وضعیت HTTP | علت |
---|---|---|
steps.oauth.v2.access_token_expired | 500 | رمز دسترسی ارسال شده به خط مشی منقضی شده است. |
steps.oauth.v2.authorization_code_expired | 500 | کد مجوز ارسال شده به خط مشی منقضی شده است. |
steps.oauth.v2.invalid_access_token | 500 | رمز دسترسی ارسال شده به خط مشی نامعتبر است. |
steps.oauth.v2.invalid_client-invalid_client_id | 500 | شناسه مشتری ارسال شده به خط مشی نامعتبر است. |
steps.oauth.v2.invalid_refresh_token | 500 | نشانه تازهسازی ارسال شده به خطمشی نامعتبر است. |
steps.oauth.v2.invalid_request-authorization_code_invalid | 500 | کد مجوز ارسال شده به خط مشی نامعتبر است. |
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound | 401 | لطفاً این پست انجمن Apigee را برای اطلاعات در مورد عیب یابی این خطا ببینید. |
steps.oauth.v2.refresh_token_expired | 500 | رمز بهروزرسانی ارسال شده به خطمشی منقضی شده است. |
خطاهای استقرار
برای اطلاعات در مورد خطاهای استقرار به پیام گزارش شده در UI مراجعه کنید.
متغیرهای خطا
این متغیرها زمانی تنظیم می شوند که این خط مشی خطایی را در زمان اجرا ایجاد کند.
متغیرها | کجا | مثال |
---|---|---|
fault.name=" fault_name " | fault_name نام خطا است، همانطور که در جدول خطاهای Runtime در بالا ذکر شده است. نام خطا آخرین قسمت کد خطا است. | fault.name Matches "IPDeniedAccess" |
oauthV2. policy_name .failed | policy_name نام سیاستی است که توسط کاربر مشخص شده است که خطا را ایجاد کرده است. | oauthV2.GetTokenInfo.failed = true |
oauthV2. policy_name .fault.name | policy_name نام سیاستی است که توسط کاربر مشخص شده است که خطا را ایجاد کرده است. | oauthV2.GetToKenInfo.fault.name = invalid_client-invalid_client_id |
oauthV2. policy_name .fault.cause | policy_name نام سیاستی است که توسط کاربر مشخص شده است که خطا را ایجاد کرده است. | oauthV2.GetTokenInfo.cause = ClientID is Invalid |
نمونه پاسخ خطا
{ "fault":{ "faultstring":"ClientId is Invalid", "detail":{ "errorcode":"keymanagement.service.invalid_client-invalid_client_id" } } }
مثال قانون خطا
<FaultRule name="OAuthV2 Faults"> <Step> <Name>AM-InvalidClientIdResponse</Name> </Step> <Condition>(fault.name = "invalid_client-invalid_client_id")</Condition> </FaultRule>