درحال مشاهده اسناد Apigee Edge هستید.
به
اسناد Apigee X بروید. اطلاعات
چه
مشخصههای کدهای دسترسی، کدهای بازآوری، کدهای مجوز، و مشخصههای برنامه کارخواه را دریافت میکند و متغیرها را با مقادیر آن مشخصهها تکمیل میکند.
این خطمشی زمانی مفید است که بخواهید رفتار پویا و شرطی را براساس مقدار موجود در کد اصالتسنجی یا کد رمز پیکربندی کنید. هرگاه اعتبارسنجی دادهواحد انجام شود، متغیرها بهطور خودکار با مقادیر مشخصههای دادهواحد تکمیل میشوند. بااینحال، در مواردی که درستیسنجی کد انجام نشده است، میتوانید از این ویژگی برای پر کردن صریح متغیرها با مقادیر مشخصه کد استفاده کنید. همچنین سفارشیسازی نشانها و کدهای مجوز را ببینید.
رمز دسترسی که به این خطمشی ارسال میکنید باید معتبر باشد، درغیراینصورت خطمشی خطای invalid_access_token را برمیگرداند.
نمونهها
نمونههای زیر از خطمشی «دریافت اطلاعات OAuth V2» برای بازیابی اطلاعات درباره عناصر مختلف گردش کار OAuth2 و سپس دسترسی به آن اطلاعات در کد استفاده میکنند.
کد دسترسی
برای دریافت مرجع به کد دسترسی، از عنصر <AccessToken> در خطمشیتان استفاده کنید.
مثال زیر انتظار دارد که کد دسترسی را در پارامتر پُرسمانی به نام «access_token» پیدا کند (جزئیات پیادهسازی واقعی به شما بستگی دارد):
<GetOAuthV2Info name="MyTokenAttrsPolicy"> <AccessToken ref="request.queryparam.access_token"></AccessToken> </GetOAuthV2Info>
با درنظر گرفتن کد دسترسی، خطمشی نمایه کد را جستجو میکند و مجموعهای از متغیرها را با دادههای نمایه تکمیل میکند.
سپس میتوانید بااستفاده از جاوا اسکریپت یا روشی دیگر به متغیرها دسترسی پیدا کنید. مثال زیر محدوده(های) مرتبط با کد دسترسی را بااستفاده از جاوا اسکریپت بازیابی میکند:
var scope = context.getVariable('oauthv2accesstoken.MyTokenAttrsPolicy.scope');
توجه داشته باشید که برای دسترسی به آن متغیرها در کد، باید پیشوند «oauthv2accesstoken» را به آنها اضافه کنید. برای مشاهده فهرست کامل متغیرهای دردسترس ازطریق کد دسترسی، متغیرهای کد دسترسی را ببینید.
کد اصالتسنجی
برای دریافت مشخصههای کد مجوز، از عنصر <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>
با درنظر گرفتن کد بازآوری، خطمشی اطلاعات کد بازآوری را جستجو میکند و مجموعهای از متغیرها را با دادههای کد بازآوری تکمیل میکند.
سپس میتوانید بااستفاده از جاوا اسکریپت یا روشی دیگر به آن متغیرها دسترسی پیدا کنید. مثال زیر مشخصه سفارشی مرتبط با کد بازآوری را بااستفاده از جاوا اسکریپت بازیابی میکند:
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>
نمایه را برای کد دسترسی بازیابی میکند. یا متغیری را که حاوی رشته نماد دسترسی است یا رشته نماد تحتاللفظی (مورد نادر) را ارسال میکنید. در این مثال، کد دسترسی از یک پارامتر پُرسمان که در یک درخواست ارسال شده است بازیابی میشود. اگر میخواهید اطلاعات مربوط به یک کد دسترسی لغوشده یا منقضی را برگردانید، از عنصر <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>
حتی اگر کد منقضی یا باطل شده باشد، اطلاعات کد را برمیگرداند. این عنصر فقط با رمزهای دسترسی قابل استفاده است. اطلاعات مربوط به نهادهای دیگر مثل نشانهای بازآوری و کدهای مجوز بهطور پیشفرض بدون توجه به وضعیتشان برگردانده میشود.
<IgnoreAccessTokenStatus>true</IgnoreAccessTokenStatus>
|
پیشفرض: |
نادرست |
|
حضور: |
اختیاری |
| نوع: | بولی |
| مقادیر معتبر: | درست یا نادرست |
عنصر <RefreshToken>
نمایه را برای ژتون بازآوری بازیابی میکند. یا متغیری را که حاوی رشته نشانه بازآوری است یا رشته نشانه حرفی (مورد نادر) را ارسال میکنید. در این مثال، کد نوسازی از پارامتر پُرسمانی که در درخواست ارسال شده است بازیابی میشود. برای فهرستی از متغیرهایی که این عمل پر میکند، «متغیرهای جریان» را ببینید.
<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>