شما در حال مشاهده مستندات 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" فراخوانی کنید. برای مشاهده لیست کاملی از متغیرهای موجود از طریق access token، به Access token variables مراجعه کنید.
کد تایید
برای دریافت ویژگیهای کد مجوز، از عنصر <AuthorizationCode> در سیاست خود استفاده کنید.
مثال زیر انتظار دارد توکن دسترسی را در پارامتر فرمی به نام "code" پیدا کند (جزئیات پیادهسازی واقعی به شما بستگی دارد):
<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" مشخص کنید. برای مشاهده لیست کاملی از متغیرهای موجود از طریق refresh token، به Refresh token variables مراجعه کنید.
استاتیک
در برخی موارد نادر، ممکن است نیاز داشته باشید مشخصات یک توکن پیکربندیشدهی ایستا (توکنی که از طریق یک متغیر قابل دسترسی نیست) را دریافت کنید. میتوانید این کار را با ارائهی مقدار توکن دسترسی به عنوان یک عنصر انجام دهید.
<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>
نمایه یک توکن دسترسی را بازیابی میکند. شما میتوانید یک متغیر که حاوی رشته توکن دسترسی است یا یک رشته توکن تحتاللفظی (در موارد نادر) را به آن ارسال کنید. در این مثال، توکن دسترسی از یک پارامتر پرسوجو که در یک درخواست ارسال شده است، بازیابی میشود. اگر میخواهید اطلاعات یک توکن لغو شده یا منقضی شده را برگردانید، از عنصر <IgnoreAccessTokenStatus> استفاده کنید.
<AccessToken ref="request.queryparam.access_token"></AccessToken>
پیشفرض: | request.formparam.access_token (یک x-www-form-urlencoded و مشخص شده در بدنه درخواست) |
حضور: | اختیاری |
| نوع: | رشته |
| مقادیر معتبر: | یا یک متغیر جریان حاوی یک رشته توکن دسترسی، یا یک رشته تحتاللفظی. |
عنصر <AuthorizationCode>
نمایه یک کد مجوز را بازیابی میکند. شما میتوانید یک متغیر حاوی رشته کد مجوز یا یک رشته توکن تحتاللفظی (در موارد نادر) را ارسال کنید. در این مثال، کد مجوز از یک پارامتر پرسوجو که در یک درخواست ارسال شده است، بازیابی میشود. برای فهرستی از متغیرهایی که توسط این عملیات پر میشوند، به « متغیرهای جریان » مراجعه کنید.
<AuthorizationCode ref="request.queryparam.authorization_code"></AuthorizationCode>
پیشفرض: | request.formparam.access_token (یک x-www-form-urlencoded و مشخص شده در بدنه درخواست) |
حضور: | اختیاری |
| نوع: | رشته |
| مقادیر معتبر: | یا یک متغیر جریان حاوی رشته کد احراز هویت، یا یک رشته تحتاللفظی. |
عنصر <ClientId>
اطلاعات مربوط به شناسهی کلاینت را بازیابی میکند. در این مثال، شناسهی کلاینت از یک پارامتر پرسوجو که در یک درخواست ارسال شده است، بازیابی میشود. برای فهرستی از متغیرهایی که توسط این عملیات پر میشوند، به « متغیرهای جریان » مراجعه کنید.
<ClientId ref="request.queryparam.client_id"></ClientId>پیشفرض: | request.formparam.access_token (یک x-www-form-urlencoded و مشخص شده در بدنه درخواست) |
حضور: | اختیاری |
| نوع: | رشته |
| مقادیر معتبر: | یا یک متغیر جریان حاوی رشته کد احراز هویت، یا یک رشته تحتاللفظی. |
عنصر <نادیده گرفتن وضعیت توکن دسترسی>
اطلاعات توکن را حتی اگر توکن منقضی یا لغو شده باشد، برمیگرداند. این عنصر فقط میتواند با توکنهای دسترسی استفاده شود. اطلاعات مربوط به سایر موجودیتها مانند توکنهای بهروزرسانی و کدهای مجوز، صرف نظر از وضعیت آنها، به طور پیشفرض، برگردانده میشوند.
<IgnoreAccessTokenStatus>true</IgnoreAccessTokenStatus>
پیشفرض: | نادرست |
حضور: | اختیاری |
| نوع: | بولی |
| مقادیر معتبر: | درست یا غلط |
عنصر <RefreshToken>
نمایه مربوط به یک توکن بهروزرسانی را بازیابی میکند. شما میتوانید یک متغیر که حاوی رشته توکن بهروزرسانی است یا یک رشته توکن تحتاللفظی (در موارد نادر) را ارسال کنید. در این مثال، توکن بهروزرسانی از یک پارامتر پرسوجو که در یک درخواست ارسال شده است، بازیابی میشود. برای فهرستی از متغیرهایی که توسط این عملیات پر میشوند، به « متغیرهای جریان » مراجعه کنید.
<RefreshToken ref="request.queryparam.refresh_token"></RefreshToken>
پیشفرض: | request.formparam.access_token (یک x-www-form-urlencoded و مشخص شده در بدنه درخواست) |
حضور: | اختیاری |
| نوع: | رشته |
| مقادیر معتبر: | یا یک متغیر جریان حاوی یک رشته توکن refresh، یا یک رشته تحتاللفظی. |
متغیرهای جریان
خطمشی 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>