شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید . اطلاعات
چه
OAuthV2 یک سیاست چندوجهی برای انجام عملیات اعطای مجوز OAuth 2.0 است. این سیاست اصلی مورد استفاده برای پیکربندی نقاط پایانی OAuth 2.0 در Apigee Edge است.
نکته: اگر میخواهید درباره OAuth در Apigee Edge بیشتر بدانید، به صفحه اصلی OAuth مراجعه کنید. این صفحه لینکهایی به منابع، نمونهها، ویدیوها و موارد دیگر ارائه میدهد. برای نمایش خوب نحوه استفاده از این سیاست در یک برنامه کاربردی، به نمونه پیشرفته OAuth در GitHub مراجعه کنید.
نمونهها
تأیید دسترسی توکن
تأیید دسترسی توکن
این پیکربندی سیاست OAuthV2 (با عملیات VerifyAccessToken) تأیید میکند که توکن دسترسی ارسال شده به Apigee Edge معتبر است. وقتی این عملیات سیاست آغاز میشود، Edge به دنبال یک توکن دسترسی معتبر در درخواست میگردد. اگر توکن دسترسی معتبر باشد، درخواست اجازه ادامه پیدا میکند. اگر نامعتبر باشد، تمام پردازش متوقف میشود و در پاسخ خطایی برگردانده میشود.
<OAuthV2 async="false" continueOnError="false" enabled="true" name="OAuth-v20-2">
<DisplayName>OAuth v2.0 2</DisplayName>
<Operation>VerifyAccessToken</Operation>
<AccessTokenPrefix>Bearer</AccessTokenPrefix> <!-- Optional, default is Bearer -->
</OAuthV2>توجه: فقط توکنهای حامل OAuth 2.0 پشتیبانی میشوند. توکنهای کد احراز هویت پیام (MAC) پشتیبانی نمیشوند.
برای مثال:
$ curl -H "Authorization: Bearer ylSkZIjbdWybfsUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282
به طور پیشفرض، Edge توکنهای دسترسی را در سربرگ Authorization با پیشوند Bearer میپذیرد. میتوانید این پیشفرض را با عنصر <AccessToken> تغییر دهید.
ایجاد توکن دسترسی
تولید توکنهای دسترسی
برای مثالهایی که نحوه درخواست توکنهای دسترسی برای هر یک از انواع کمکهای پشتیبانیشده را نشان میدهند، به بخش درخواست توکنهای دسترسی و کدهای مجوز مراجعه کنید. این مبحث شامل نمونههایی از این عملیات است:
تولید کد مجوز
تولید کد مجوز
برای مثالهایی که نحوه درخواست کدهای مجوز را نشان میدهند، به درخواست کد مجوز مراجعه کنید.
توکن دسترسی تازه
بهروزرسانی یک توکن دسترسی
برای مثالهایی که نحوه درخواست توکنهای دسترسی با استفاده از توکن بهروزرسانی را نشان میدهند، به بخش «بهروزرسانی توکن دسترسی» مراجعه کنید.
توکن جریان پاسخ
یک توکن دسترسی در جریان پاسخ ایجاد کنید
گاهی اوقات ممکن است نیاز داشته باشید که در جریان پاسخ، یک توکن دسترسی ایجاد کنید. برای مثال، ممکن است این کار را در پاسخ به برخی اعتبارسنجیهای سفارشی انجام شده در یک سرویس backend انجام دهید. در این مثال، مورد استفاده هم به یک توکن دسترسی و هم به یک توکن refresh نیاز دارد و نوع اعطای ضمنی را حذف میکند. در این حالت، ما از نوع اعطای رمز عبور برای تولید توکن استفاده خواهیم کرد. همانطور که خواهید دید، ترفند انجام این کار، ارسال یک هدر درخواست مجوز با یک سیاست جاوا اسکریپت است.
ابتدا، بیایید به نمونه سیاست نگاهی بیندازیم:
<OAuthV2 enabled="true" continueOnError="false" async="false" name="generateAccessToken"> <Operation>GenerateAccessToken</Operation> <AppEndUser>Doe</AppEndUser> <UserName>jdoe</UserName> <PassWord>jdoe</PassWord> <GrantType>grant_type</GrantType> <ClientId>a_valid_client_id</ClientId> <SupportedGrantTypes> <GrantType>password</GrantType> </SupportedGrantTypes> </OAuthV2>
اگر این پالیسی را روی جریان پاسخ قرار دهید، با وجود اینکه پارامترهای ورود صحیح در پالیسی مشخص شده باشند، با خطای 401 UnAuthorized مواجه خواهد شد. برای حل این مشکل، باید یک هدر درخواست مجوز تنظیم کنید.
سرآیند Authorization باید شامل یک طرح دسترسی Basic با client_id:client_secret کدگذاری شده با Base64 باشد.
میتوانید این هدر را با یک سیاست جاوا اسکریپت که درست قبل از سیاست OAuthV2 قرار داده شده است، مانند این اضافه کنید. متغیرهای "local_clientid" و "local_secret" باید قبلاً تنظیم شده و در جریان موجود باشند:
var client_id = context.getVariable("local_clientid"); var client_secret = context.getVariable("local_secret"); context.setVariable("request.header.Authorization","Basic "+CryptoJS.enc.Base64.stringify(CryptoJS.enc.Latin1 .parse(client_id + ':' + client_secret)));
همچنین به « رمزگذاری اعتبارنامههای احراز هویت پایه » مراجعه کنید.
مرجع عنصر
مرجع سیاست، عناصر و ویژگیهای سیاست OAuthV2 را شرح میدهد.
سیاست نمونه نشان داده شده در زیر یکی از پیکربندیهای ممکن است. این نمونه، یک سیاست OAuthV2 پیکربندی شده برای عملیات GenerateAccessToken را نشان میدهد. این سیاست شامل عناصر الزامی و اختیاری است. برای جزئیات بیشتر به توضیحات عناصر در این بخش مراجعه کنید.
<OAuthV2 name="GenerateAccessToken"> <!-- This policy generates an OAuth 2.0 access token using the client_credentials grant type --> <Operation>GenerateAccessToken</Operation> <!-- This is in millseconds, so expire in an hour --> <ExpiresIn>3600000</ExpiresIn> <SupportedGrantTypes> <GrantType>client_credentials</GrantType> </SupportedGrantTypes> <GrantType>request.queryparam.grant_type</GrantType> <GenerateResponse/> </OAuthV2>
ویژگیهای <OAuthV2>
<OAuthV2 async="false" continueOnError="false" enabled="true" name="MyOAuthPolicy">
جدول زیر ویژگی هایی را توصیف می کند که برای همه عناصر اصلی خط مشی مشترک هستند:
| صفت | توضیحات | پیش فرض | حضور |
|---|---|---|---|
name | نام داخلی سیاست. مقدار مشخصه در صورت تمایل، از عنصر | N/A | مورد نیاز |
continueOnError | برای بازگرداندن خطا در صورت شکست خط مشی، روی روی | نادرست | اختیاری |
enabled | برای اجرای خط مشی روی برای خاموش کردن خط مشی، روی | درست است | اختیاری |
async | این ویژگی منسوخ شده است. | نادرست | منسوخ شده است |
عنصر <DisplayName>
علاوه بر ویژگی name برای برچسبگذاری خطمشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.
<DisplayName>Policy Display Name</DisplayName>
| پیش فرض | N/A اگر این عنصر را حذف کنید، از مقدار ویژگی |
|---|---|
| حضور | اختیاری |
| تایپ کنید | رشته |
عنصر <AccessToken>
<AccessToken>request.header.access_token</AccessToken>
به طور پیشفرض، VerifyAccessToken انتظار دارد که توکن دسترسی در هدر Authorization ارسال شود. شما میتوانید این پیشفرض را با استفاده از این عنصر تغییر دهید. به عنوان مثال request.queryparam.access_token نشان میدهد که توکن دسترسی باید به عنوان یک پارامتر پرسوجو با نام access_token ارائه شود.
<AccessToken>request.header.access_token</AccessToken> مشخص شده است:curl https://myorg-myenv.apigee.net/oauth2/validate -H "access_token:Rft3dqrs56Blirls56a"
<AccessToken>request.queryparam.access_token</AccessToken> مشخص شده است:curl "https://myorg-myenv.apigee.net/oauth2/validate?access_token:Rft3dqrs56Blirls56a"
پیشفرض: | ناموجود |
حضور: | اختیاری |
| نوع: | رشته |
| با عملیات استفاده میشود: |
|
عنصر <AccessTokenPrefix>
<AccessTokenPrefix>Bearer</AccessTokenPrefix>
به طور پیشفرض، VerifyAccessToken انتظار دارد که توکن دسترسی در یک هدر مجوز (Authorization header) به عنوان توکن حامل (Bearer token) ارسال شود. برای مثال:
-H "Authorization: Bearer Rft3dqrs56Blirls56a"
در حال حاضر، Bearer تنها پیشوند پشتیبانی شده است.
پیشفرض: | حامل |
حضور: | اختیاری |
| نوع: | رشته |
| مقادیر معتبر: | حامل |
| با عملیات استفاده میشود: |
|
عنصر <AppEndUser>
<AppEndUser>request.queryparam.app_enduser</AppEndUser>
در مواردی که شناسه کاربر نهایی برنامه باید به سرور تأیید ارسال شود، این عنصر به شما امکان میدهد مشخص کنید که Edge کجا باید شناسه کاربر نهایی را جستجو کند. به عنوان مثال، میتواند به عنوان یک پارامتر پرس و جو یا در یک هدر HTTP ارسال شود.
برای مثال request.queryparam.app_enduser نشان میدهد که AppEndUser باید به عنوان یک پارامتر پرسوجو وجود داشته باشد، مانند ?app_enduser=ntesla@theramin.com . برای درخواست AppEndUser در یک هدر HTTP، این مقدار را به request.header.app_enduser تنظیم کنید.
ارائه این تنظیم به شما امکان میدهد تا شناسه کاربر نهایی برنامه را در توکن دسترسی وارد کنید. این ویژگی در صورتی مفید است که بخواهید توکنهای دسترسی OAuth 2.0 را بر اساس شناسه کاربر نهایی بازیابی یا لغو کنید. برای اطلاعات بیشتر، به بخش «فعال کردن بازیابی و لغو توکنهای دسترسی OAuth 2.0 بر اساس شناسه کاربر نهایی، شناسه برنامه یا هر دو» مراجعه کنید.
پیشفرض: | ناموجود |
حضور: | اختیاری |
| نوع: | رشته |
| مقادیر معتبر: | هر متغیر جریانی که در زمان اجرا برای خطمشی قابل دسترسی باشد. |
| با انواع کمک هزینه استفاده میشود: |
|
<ویژگیها/صفت>
<Attributes> <Attribute name="attr_name1" ref="flow.variable" display="true|false">value1</Attribute> <Attribute name="attr_name2" ref="flow.variable" display="true|false">value2</Attribute> </Attributes>
از این عنصر برای افزودن ویژگیهای سفارشی به یک توکن دسترسی یا کد مجوز استفاده کنید. برای مثال، ممکن است بخواهید یک شناسه کاربری یا شناسه جلسه را در یک توکن دسترسی جاسازی کنید که بتواند در زمان اجرا استخراج و بررسی شود.
این عنصر به شما امکان میدهد مقداری را در یک متغیر جریان یا از یک رشتهی تحتاللفظی مشخص کنید. اگر هم یک متغیر و هم یک رشته را مشخص کنید، مقداری که در متغیر جریان مشخص شده است استفاده میشود. اگر متغیر قابل حل نباشد، رشته پیشفرض است.
برای اطلاعات بیشتر در مورد استفاده از این عنصر، به بخش «سفارشیسازی توکنها و کدهای مجوز» مراجعه کنید.
نمایش یا پنهان کردن ویژگیهای سفارشی در پاسخ
به یاد داشته باشید که اگر عنصر GenerateResponse این خطمشی را روی true تنظیم کنید، نمایش کامل JSON از توکن، شامل هر ویژگی سفارشی که تنظیم کردهاید، در پاسخ بازگردانده میشود. در برخی موارد، ممکن است بخواهید برخی یا همه ویژگیهای سفارشی خود را در پاسخ پنهان کنید تا برای برنامههای کلاینت قابل مشاهده نباشند.
به طور پیشفرض، ویژگیهای سفارشی در پاسخ ظاهر میشوند. اگر میخواهید آنها را پنهان کنید، میتوانید پارامتر نمایش را روی false تنظیم کنید. برای مثال:
<Attributes>
<Attribute name="employee_id" ref="employee.id" display="false"/>
<Attribute name="employee_name" ref="employee.name" display="false"/>
</Attributes>مقدار ویژگی display ذخیره نمیشود. فرض کنید شما یک توکن دسترسی (access token) با ویژگیهای سفارشی ایجاد میکنید که میخواهید در پاسخ تولید شده پنهان شوند. تنظیم display=false این هدف را محقق میکند. با این حال، اگر بعداً یک توکن دسترسی جدید با استفاده از یک توکن تازهسازی (refresh token) ایجاد شود، ویژگیهای سفارشی اصلی از توکن دسترسی در پاسخ توکن تازهسازی نمایش داده میشوند. دلیل این امر این است که Edge به خاطر نمیآورد که ویژگی display در ابتدا در سیاست تولید توکن دسترسی (generate access token) روی false تنظیم شده است - ویژگی سفارشی صرفاً بخشی از فراداده توکن دسترسی است.
اگر ویژگیهای سفارشی را به یک کد مجوز اضافه کنید، همین رفتار را خواهید دید -- وقتی یک توکن دسترسی با استفاده از آن کد ایجاد میشود، آن ویژگیهای سفارشی در پاسخ توکن دسترسی نمایش داده میشوند. باز هم، ممکن است این رفتاری نباشد که شما مد نظر دارید.
برای پنهان کردن ویژگیهای سفارشی در این موارد، این گزینهها را دارید:
- ویژگیهای سفارشی را به طور صریح در سیاست refresh token بازنشانی کنید و نمایش آنها را روی false تنظیم کنید. در این حالت، ممکن است لازم باشد مقادیر سفارشی اصلی را با استفاده از سیاست GetOAuthV2Info از توکن دسترسی اصلی بازیابی کنید.
- از یک سیاست جاوا اسکریپت پسپردازش برای استخراج دستی هرگونه ویژگی سفارشی که نمیخواهید در پاسخ ببینید، استفاده کنید.
همچنین به بخش سفارشیسازی توکنها و کدهای مجوز مراجعه کنید.
پیشفرض: | |
حضور: | اختیاری |
| مقادیر معتبر: |
|
| با انواع کمک هزینه استفاده میشود: |
|
عنصر <ClientId>
<ClientId>request.formparam.client_id</ClientId>
در چندین مورد، برنامه کلاینت باید شناسه کلاینت را به سرور مجوز ارسال کند. این عنصر مشخص میکند که Apigee باید شناسه کلاینت را در متغیر جریان request.formparam.client_id جستجو کند. تنظیم ClientId روی هر متغیر دیگری پشتیبانی نمیشود. همچنین به درخواست توکنهای دسترسی و کدهای مجوز مراجعه کنید.
پیشفرض: | request.formparam.client_id (یک x-www-form-urlencoded و مشخص شده در بدنه درخواست) |
حضور: | اختیاری |
| نوع: | رشته |
| مقادیر معتبر: | متغیر جریان: request.formparam.client_id |
| با انواع کمک هزینه استفاده میشود: |
همچنین میتواند با عملیات GenerateAuthorizationCode مورد استفاده قرار گیرد. |
عنصر <کد>
<Code>request.queryparam.code</Code>
در جریان نوع اعطای مجوز، کلاینت باید یک کد مجوز را به سرور مجوز (Apigee Edge) ارسال کند. این عنصر به شما امکان میدهد مشخص کنید که Edge کجا باید به دنبال کد مجوز بگردد. به عنوان مثال، میتواند به عنوان یک پارامتر پرس و جو، هدر HTTP یا پارامتر فرم (پیشفرض) ارسال شود.
متغیر request.queryparam.auth_code نشان میدهد که کد مجوز باید به عنوان یک پارامتر پرسوجو، مانند مثلاً ?auth_code=AfGlvs9 ، ارائه شود. برای درخواست کد مجوز در یک هدر HTTP، به عنوان مثال، این مقدار را روی request.header.auth_code تنظیم کنید. همچنین به بخش درخواست توکنهای دسترسی و کدهای مجوز مراجعه کنید.
پیشفرض: | request.formparam.code (یک x-www-form-urlencoded و مشخص شده در بدنه درخواست) |
حضور: | اختیاری |
| نوع: | رشته |
| مقادیر معتبر: | هر متغیر جریانی که در زمان اجرا برای سیاست قابل دسترسی باشد |
| با انواع کمک هزینه استفاده میشود: | کد_مجوز |
عنصر <منقضی میشود>
<ExpiresIn>10000</ExpiresIn>
زمان انقضای توکنهای دسترسی و کدهای مجوز را بر حسب میلیثانیه اعمال میکند. (برای توکنهای تازهسازی، از <RefreshTokenExpiresIn> استفاده کنید.) مقدار زمان انقضا، مقداری است که توسط سیستم به علاوهی مقدار <ExpiresIn> تولید میشود. اگر <ExpiresIn> روی -1 تنظیم شده باشد، توکن یا کد مطابق با حداکثر انقضای توکن دسترسی OAuth منقضی میشود. اگر <ExpiresIn> مشخص نشده باشد، سیستم مقدار پیشفرض پیکربندیشده در سطح سیستم را اعمال میکند.
زمان انقضا را میتوان در زمان اجرا با استفاده از یک مقدار پیشفرض و کدنویسی شده یا با ارجاع به یک متغیر جریان تنظیم کرد. به عنوان مثال، میتوانید مقدار انقضای توکن را در یک نگاشت مقدار کلید ذخیره کنید، آن را بازیابی کنید، به یک متغیر اختصاص دهید و در سیاست به آن ارجاع دهید. به عنوان مثال، kvm.oauth.expires_in .
با Apigee Edge برای فضای ابری عمومی ، Edge موجودیتهای زیر را حداقل به مدت ۱۸۰ ثانیه پس از دسترسی به آنها در حافظه پنهان (cache) نگه میدارد.
- توکنهای دسترسی OAuth. این بدان معناست که یک توکن لغو شده ممکن است تا سه دقیقه، تا زمانی که محدودیت حافظه پنهان آن منقضی شود، همچنان موفق باشد.
- موجودیتهای سرویس مدیریت کلید (KMS) (برنامهها، توسعهدهندگان، محصولات API).
- ویژگیهای سفارشی روی توکنهای OAuth و موجودیتهای KMS.
بند زیر یک متغیر جریان و یک مقدار پیشفرض را نیز مشخص میکند. توجه داشته باشید که مقدار متغیر جریان بر مقدار پیشفرض مشخصشده اولویت دارد.
<ExpiresIn ref="kvm.oauth.expires_in">
3600000 <!--default value in milliseconds-->
</ExpiresIn>اج از روشی برای اعمال محدودیت انقضای توکن پس از ایجاد آن پشتیبانی نمیکند. اگر نیاز به اعمال محدودیت انقضای توکن دارید (مثلاً بر اساس یک شرط)، یک راه حل ممکن در این پست انجمن Apigee شرح داده شده است.
به طور پیشفرض، توکنهای دسترسی منقضی شده، ۳ روز پس از انقضا به طور خودکار از سیستم Apigee Edge پاک میشوند. همچنین به بخش پاک کردن توکنهای دسترسی مراجعه کنید.
ابر خصوصی: برای نصب Edge برای ابر خصوصی، مقدار پیشفرض توسط ویژگی conf_keymanagement_oauth_auth_code_expiry_time_in_millis تنظیم میشود. برای تنظیم این ویژگی:
- فایل
message-processor.propertiesرا در یک ویرایشگر باز کنید. اگر فایل وجود ندارد، آن را ایجاد کنید:vi /opt/apigee/customer/application/message-processor.properties
- ویژگی را به دلخواه تنظیم کنید:
conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
- مطمئن شوید که فایل properties متعلق به کاربر "apigee" است:
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- پردازشگر پیام را مجدداً راهاندازی کنید.
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
پیشفرض: | اگر مشخص نشده باشد، سیستم مقدار پیشفرض پیکربندیشده در سطح سیستم را اعمال میکند. |
حضور: | اختیاری |
| نوع: | عدد صحیح |
| مقادیر معتبر: |
|
| با انواع کمک هزینه استفاده میشود: |
همچنین با عملیات GenerateAuthorizationCode استفاده میشود. |
عنصر <ExternalAccessToken>
<ExternalAccessToken>request.queryparam.external_access_token</ExternalAccessToken>
به Apigee Edge میگوید که کجا یک توکن دسترسی خارجی (یک توکن دسترسی که توسط Apigee Edge تولید نشده است) را پیدا کند.
متغیر request.queryparam.external_access_token نشان میدهد که توکن دسترسی خارجی باید به عنوان یک پارامتر پرسوجو ارائه شود، مثلاً ?external_access_token=12345678 . برای درخواست توکن دسترسی خارجی در یک هدر HTTP، به عنوان مثال، این مقدار را روی request.header.external_access_token تنظیم کنید. همچنین به بخش استفاده از توکنهای OAuth شخص ثالث مراجعه کنید.
عنصر <ExternalAuthorization>
<ExternalAuthorization>true</ExternalAuthorization>
اگر این عنصر نادرست باشد یا وجود نداشته باشد، Edge به طور معمول client_id و client_secret را در برابر مخزن مجوز Apigee Edge اعتبارسنجی میکند. از این عنصر زمانی استفاده کنید که میخواهید با توکنهای OAuth شخص ثالث کار کنید. برای جزئیات بیشتر در مورد استفاده از این عنصر، به بخش «استفاده از توکنهای OAuth شخص ثالث» مراجعه کنید.
پیشفرض: | نادرست |
حضور: | اختیاری |
| نوع: | بولی |
| مقادیر معتبر: | درست یا غلط |
| با انواع کمک هزینه استفاده میشود: |
|
عنصر <ExternalAuthorizationCode>
<ExternalAuthorizationCode>request.queryparam.external_auth_code</ExternalAuthorizationCode>
به Apigee Edge میگوید که کجا یک کد تأیید خارجی (کد تأییدی که توسط Apigee Edge تولید نشده است) را پیدا کند.
متغیر request.queryparam.external_auth_code نشان میدهد که کد احراز هویت خارجی باید به عنوان یک پارامتر کوئری وجود داشته باشد، به عنوان مثال، ?external_auth_code=12345678 . برای درخواست کد احراز هویت خارجی در یک هدر HTTP، به عنوان مثال، این مقدار را روی request.header.external_auth_code تنظیم کنید. همچنین به بخش استفاده از توکنهای OAuth شخص ثالث مراجعه کنید.
عنصر <ExternalRefreshToken>
<ExternalRefreshToken>request.queryparam.external_refresh_token</ExternalRefreshToken>
به Apigee Edge میگوید که کجا یک توکن بهروزرسانی خارجی (یک توکن بهروزرسانی که توسط Apigee Edge تولید نشده است) پیدا کند.
متغیر request.queryparam.external_refresh_token نشان میدهد که توکن بهروزرسانی خارجی باید به عنوان یک پارامتر پرسوجو ارائه شود، مثلاً ?external_refresh_token=12345678 . برای درخواست توکن بهروزرسانی خارجی در یک هدر HTTP، به عنوان مثال، این مقدار را روی request.header.external_refresh_token تنظیم کنید. همچنین به بخش استفاده از توکنهای OAuth شخص ثالث مراجعه کنید.
عنصر <GenerateResponse>
<GenerateResponse enabled='true'/>
اگر روی true تنظیم شود، این سیاست یک پاسخ تولید و برمیگرداند. برای مثال، برای GenerateAccessToken، پاسخ ممکن است مانند زیر باشد:
{ "issued_at" : "1467841035013", "scope" : "read", "application_name" : "e31b8d06-d538-4f6b-9fe3-8796c11dc930", "refresh_token_issued_at" : "1467841035013", "status" : "approved", "refresh_token_status" : "approved", "api_product_list" : "[Product1, nhl_product]", "expires_in" : "1799", "developer.email" : "edward@slalom.org", "token_type" : "BearerToken", "refresh_token" : "rVSmm3QaNa0xBVFbUISz1NZI15akvgLJ", "client_id" : "Adfsdvoc7KX5Gezz9le745UEql5dDmj", "access_token" : "AnoHsh2oZ6EFWF4h0KrA0gC5og3a", "organization_name" : "cerruti", "refresh_token_expires_in" : "0", "refresh_count" : "0" }
اگر false ، هیچ پاسخی ارسال نمیشود. در عوض، مجموعهای از متغیرهای جریان با مقادیری مرتبط با تابع سیاست پر میشوند. برای مثال، یک متغیر جریان به نام oauthv2authcode.OAuthV2-GenerateAuthorizationCode.code با کد احراز هویت تازه ایجاد شده پر میشود. توجه داشته باشید که expires_in در پاسخ بر حسب ثانیه بیان میشود.
پیشفرض: | نادرست |
حضور: | اختیاری |
| نوع: | رشته |
| مقادیر معتبر: | درست یا غلط |
| با انواع کمک هزینه استفاده میشود: |
|
عنصر <GenerateErrorResponse>
<GenerateErrorResponse enabled='true'/>
اگر روی true تنظیم شود، سیاست پاسخی تولید و برمیگرداند اگر ویژگی ContinueOnError روی true تنظیم شده باشد. اگر false (پیشفرض) باشد، هیچ پاسخی ارسال نمیشود. در عوض، مجموعهای از متغیرهای جریان با مقادیری مرتبط با تابع سیاست پر میشوند.
پیشفرض: | نادرست |
حضور: | اختیاری |
| نوع: | رشته |
| مقادیر معتبر: | درست یا غلط |
| با انواع کمک هزینه استفاده میشود: |
|
<نوع کمک هزینه>
<GrantType>request.queryparam.grant_type</GrantType>
به سیاست میگوید که پارامتر نوع اعطای مجوز که در یک درخواست ارسال میشود را از کجا پیدا کند. طبق مشخصات OAuth 2.0، نوع اعطای مجوز باید همراه با درخواستهای مربوط به توکنهای دسترسی و کدهای مجوز ارائه شود. این متغیر میتواند یک هدر، پارامتر پرسوجو یا پارامتر فرم (پیشفرض) باشد.
برای مثال request.queryparam.grant_type نشان میدهد که رمز عبور باید به عنوان یک پارامتر پرس و جو، مانند ?grant_type=password ، ارائه شود. برای مثال، برای درخواست نوع اعطای دسترسی در یک هدر HTTP، این مقدار را روی request.header.grant_type تنظیم کنید. همچنین به درخواست توکنهای دسترسی و کدهای مجوز مراجعه کنید.
پیشفرض: | request.formparam.grant_type (یک x-www-form-urlencoded و مشخص شده در بدنه درخواست) |
حضور: | اختیاری |
| نوع: | رشته |
| مقادیر معتبر: | یک متغیر، همانطور که در بالا توضیح داده شد. |
| با انواع کمک هزینه استفاده میشود: |
|
عنصر <عملیات>
<Operation>GenerateAuthorizationCode</Operation>
عملیات OAuth 2.0 که توسط این سیاست اجرا شده است.
پیشفرض: | اگر |
حضور: | اختیاری |
| نوع: | رشته |
| مقادیر معتبر: |
|
عنصر <PassWord>
<PassWord>request.queryparam.password</PassWord>
این عنصر فقط با نوع اعطای رمز عبور استفاده میشود . با نوع اعطای رمز عبور، اعتبارنامههای کاربر (رمز عبور و نام کاربری) باید در اختیار خطمشی OAuthV2 قرار گیرند. عناصر <PassWord> و <UserName> برای مشخص کردن متغیرهایی استفاده میشوند که Edge میتواند این مقادیر را در آنها پیدا کند. اگر این عناصر مشخص نشوند، خطمشی انتظار دارد مقادیر را (به طور پیشفرض) در پارامترهای فرم به نام username و password پیدا کند. اگر مقادیر یافت نشوند، خطمشی خطا میدهد. میتوانید از عناصر <PassWord> و <UserName> برای ارجاع به هر متغیر جریانی که حاوی اعتبارنامهها است استفاده کنید.
برای مثال، میتوانید رمز عبور را در یک درخواست توکن با استفاده از یک پارامتر پرسوجو ارسال کنید و عنصر را به این صورت تنظیم کنید: <PassWord>request.queryparam.password</PassWord> . برای درخواست رمز عبور در یک هدر HTTP، این مقدار را روی request.header.password تنظیم کنید.
سیاست OAuthV2 هیچ کار دیگری با این مقادیر اعتبارنامه انجام نمیدهد؛ Edge صرفاً وجود آنها را تأیید میکند. این وظیفه توسعهدهنده API است که درخواست مقادیر را بازیابی کرده و آنها را قبل از اجرای سیاست تولید توکن به یک ارائهدهنده هویت ارسال کند.
همچنین به درخواست توکنهای دسترسی و کدهای مجوز مراجعه کنید.
پیشفرض: | request.formparam.password (یک x-www-form-urlencoded و مشخص شده در بدنه درخواست) |
حضور: | اختیاری |
| نوع: | رشته |
| مقادیر معتبر: | هر متغیر جریانی که در زمان اجرا برای سیاست در دسترس باشد. |
| با انواع کمک هزینه استفاده میشود: | رمز عبور |
عنصر <RedirectUri>
<RedirectUri>request.queryparam.redirect_uri</RedirectUri>
مشخص میکند که Edge باید در کجای درخواست، پارامتر redirect_uri را جستجو کند.
درباره URI های تغییر مسیر
URI های تغییر مسیر با کد مجوز و انواع اعطای ضمنی استفاده میشوند. URI تغییر مسیر به سرور مجوز (Edge) میگوید که کد مجوز (برای نوع اعطای کد تأیید) یا توکن دسترسی (برای نوع اعطای ضمنی) را به کجا ارسال کند. درک این نکته مهم است که این پارامتر چه زمانی الزامی، چه زمانی اختیاری و چگونه استفاده میشود:
(الزامی) اگر یک URL بازگشتی در برنامه توسعهدهنده ثبت شده باشد که با کلیدهای کلاینت درخواست مرتبط است، و اگر
redirect_uriدر درخواست وجود داشته باشد، این دو باید دقیقاً با هم مطابقت داشته باشند. اگر مطابقت نداشته باشند، خطایی بازگردانده میشود. برای اطلاعات در مورد ثبت برنامههای توسعهدهنده در Edge و تعیین URL بازگشتی، به ثبت برنامهها و مدیریت کلیدهای API مراجعه کنید.- (اختیاری) اگر یک URL برگشتی ثبت شده باشد و
redirect_uriاز درخواست حذف شده باشد، Edge به URL برگشتی ثبت شده هدایت میشود. - (الزامی) اگر یک URL برگشتی ثبت نشده باشد،
redirect_uriالزامی است. توجه داشته باشید که در این حالت، Edge هر URL را میپذیرد. این مورد میتواند یک مشکل امنیتی ایجاد کند و بنابراین فقط باید با برنامههای کلاینت قابل اعتماد استفاده شود. اگر برنامههای کلاینت قابل اعتماد نیستند، بهترین روش این است که همیشه ثبت یک URL برگشتی الزامی باشد.
میتوانید این پارامتر را در یک پارامتر پرسوجو یا در یک هدر ارسال کنید. متغیر request.queryparam.redirect_uri نشان میدهد که RedirectUri باید به عنوان یک پارامتر پرسوجو وجود داشته باشد، مثلاً ?redirect_uri=login.myapp.com . برای درخواست RedirectUri در یک هدر HTTP، به عنوان مثال، این مقدار را روی request.header.redirect_uri تنظیم کنید. همچنین به درخواست توکنهای دسترسی و کدهای مجوز مراجعه کنید.
پیشفرض: | request.formparam.redirect_uri (یک x-www-form-urlencoded و مشخص شده در بدنه درخواست) |
حضور: | اختیاری |
| نوع: | رشته |
| مقادیر معتبر: | هر متغیر جریانی که در زمان اجرا در سیاست قابل دسترسی باشد |
| با انواع کمک هزینه استفاده میشود: |
همچنین با عملیات GenerateAuthorizationCode استفاده میشود. |
عنصر <RefreshToken>
<RefreshToken>request.queryparam.refreshtoken</RefreshToken>
هنگام درخواست یک توکن دسترسی با استفاده از توکن تازهسازی، باید توکن تازهسازی را در درخواست ارائه دهید. این عنصر به شما امکان میدهد مشخص کنید که Edge کجا باید توکن تازهسازی را جستجو کند. به عنوان مثال، میتواند به عنوان یک پارامتر پرسوجو، هدر HTTP یا پارامتر فرم (پیشفرض) ارسال شود.
متغیر request.queryparam.refreshtoken نشان میدهد که توکن refresh باید به عنوان یک پارامتر query، مانند ?refresh_token=login.myapp.com ، ارائه شود. برای مثال، برای درخواست RefreshToken در یک هدر HTTP، این مقدار را روی request.header.refresh_token تنظیم کنید. همچنین به بخش درخواست توکنهای دسترسی و کدهای مجوز مراجعه کنید.
پیشفرض: | request.formparam.refresh_token (یک x-www-form-urlencoded و مشخص شده در بدنه درخواست) |
حضور: | اختیاری |
| نوع: | رشته |
| مقادیر معتبر: | هر متغیر جریانی که در زمان اجرا در سیاست قابل دسترسی باشد |
| با انواع کمک هزینه استفاده میشود: |
|
عنصر <RefreshTokenExpiresIn>
<RefreshTokenExpiresIn>1000</RefreshTokenExpiresIn>
زمان انقضای توکنهای بهروزرسانی را بر حسب میلیثانیه اعمال میکند. مقدار زمان انقضا، مقداری است که سیستم تولید میکند به علاوهی مقدار <RefreshTokenExpiresIn> . اگر <RefreshTokenExpiresIn> روی ... تنظیم شده باشد. -1 ، توکن بهروزرسانی طبق حداکثر انقضای توکن بهروزرسانی OAuth منقضی میشود. اگر <RefreshTokenExpiresIn> مشخص نشده باشد، سیستم مقدار پیشفرض پیکربندیشده در سطح سیستم را اعمال میکند. برای اطلاعات بیشتر در مورد تنظیمات پیشفرض سیستم با پشتیبانی Apigee Edge تماس بگیرید.
زمان انقضا را میتوان در زمان اجرا با استفاده از یک مقدار پیشفرض و کدنویسی شده یا با ارجاع به یک متغیر جریان تنظیم کرد. به عنوان مثال، میتوانید مقدار انقضای توکن را در یک نگاشت مقدار کلید ذخیره کنید، آن را بازیابی کنید، به یک متغیر اختصاص دهید و در سیاست به آن ارجاع دهید. به عنوان مثال، kvm.oauth.expires_in .
بند زیر یک متغیر جریان و یک مقدار پیشفرض را نیز مشخص میکند. توجه داشته باشید که مقدار متغیر جریان بر مقدار پیشفرض مشخصشده اولویت دارد.
<RefreshTokenExpiresIn ref="kvm.oauth.expires_in">
3600000 <!--default value in milliseconds-->
</RefreshTokenExpiresIn>ابر خصوصی: برای نصب Edge برای ابر خصوصی، مقدار پیشفرض توسط ویژگی conf_keymanagement_oauth_refresh_token_expiry_time_in_millis تنظیم میشود. برای تنظیم این ویژگی:
- فایل
message-processor.propertiesرا در یک ویرایشگر باز کنید. اگر فایل وجود ندارد، آن را ایجاد کنید:vi /opt/apigee/customer/application/message-processor.properties
- ویژگی را به دلخواه تنظیم کنید:
conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
- مطمئن شوید که فایل properties متعلق به کاربر "apigee" است:
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- پردازشگر پیام را مجدداً راهاندازی کنید.
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
پیشفرض: | ۶۳۰۷۲۰۰۰۰۰۰۰ میلیثانیه (۲ سال) (از ۵ آگوست ۲۰۲۴ لازمالاجرا است) |
حضور: | اختیاری |
| نوع: | عدد صحیح |
| مقادیر معتبر: |
|
| با انواع کمک هزینه استفاده میشود: |
|
عنصر <ResponseType>
<ResponseType>request.queryparam.response_type</ResponseType>
این عنصر به Edge اطلاع میدهد که برنامهی کلاینت کدام نوع مجوز را درخواست میکند. این عنصر فقط با کد مجوز و جریانهای نوع مجوز ضمنی استفاده میشود.
به طور پیشفرض، Edge به دنبال مقدار نوع پاسخ در پارامتر پرسوجوی response_type میگردد. اگر میخواهید این رفتار پیشفرض را لغو کنید، از عنصر <ResponseType> برای پیکربندی یک متغیر جریان حاوی مقدار نوع پاسخ استفاده کنید. برای مثال، اگر این عنصر را روی request.header.response_type تنظیم کنید، Edge به دنبال نوع پاسخی میگردد که باید در هدر درخواست ارسال شود. همچنین به Requesting access tokens and authorization codes مراجعه کنید.
پیشفرض: | request.formparam.response_type (یک x-www-form-urlencoded و مشخص شده در بدنه درخواست) |
حضور: | اختیاری. اگر میخواهید رفتار پیشفرض را لغو کنید، از این عنصر استفاده کنید. |
| نوع: | رشته |
| مقادیر معتبر: | یا code (برای نوع اعطای کد مجوز) یا token (برای نوع اعطای ضمنی) |
| با انواع کمک هزینه استفاده میشود: |
|
عنصر <ReuseRefreshToken>
<ReuseRefreshToken>true</ReuseRefreshToken>
وقتی روی true تنظیم شود، توکن بهروزرسانی موجود تا زمان انقضا دوباره استفاده میشود. اگر false ، وقتی یک توکن بهروزرسانی معتبر ارائه شود، یک توکن بهروزرسانی جدید توسط Apigee Edge صادر میشود.
پیشفرض: | |
حضور: | اختیاری |
| نوع: | بولی |
| مقادیر معتبر: | |
| با نوع کمک هزینه استفاده میشود: |
|
عنصر <scope>
<Scope>request.queryparam.scope</Scope>
اگر این عنصر در یکی از سیاستهای GenerateAccessToken یا GenerateAuthorizationCode وجود داشته باشد، برای مشخص کردن اینکه کدام حوزهها باید توکن یا کد را اعطا کنند، استفاده میشود. این مقادیر معمولاً در درخواست از یک برنامه کلاینت به سیاست ارسال میشوند. میتوانید عنصر را طوری پیکربندی کنید که یک متغیر جریان را بپذیرد و به شما این امکان را میدهد که نحوه ارسال حوزهها را در یک درخواست انتخاب کنید. در مثال زیر، request.queryparam.scope نشان میدهد که حوزه باید به عنوان یک پارامتر پرس و جو، به عنوان مثال، ?scope=READ ، ارائه شود. برای مثال، برای الزام حوزه در یک هدر HTTP، این مقدار را روی request.header.scope تنظیم کنید.
اگر این عنصر در یک سیاست "VerifyAccessToken" ظاهر شود، برای مشخص کردن محدودههایی که سیاست باید اعمال کند، استفاده میشود. در این نوع سیاست، مقدار باید یک نام محدوده "کدگذاری شده" باشد -- نمیتوانید از متغیرها استفاده کنید. برای مثال:
<Scope>A B</Scope>
همچنین به بخش کار با دامنههای OAuth2 و درخواست توکنهای دسترسی و کدهای مجوز مراجعه کنید.
پیشفرض: | بدون محدوده |
حضور: | اختیاری |
| نوع: | رشته |
| مقادیر معتبر: | اگر با سیاستهای Generate* استفاده شود، یک متغیر جریان. اگر با VerifyAccessToken استفاده شود، فهرستی از نامهای دامنه (رشتهها) که با فاصله از هم جدا شدهاند. |
| با انواع کمک هزینه استفاده میشود: |
|
عنصر <State>
<State>request.queryparam.state</State>
در مواردی که برنامه کلاینت باید اطلاعات وضعیت را به سرور احراز هویت ارسال کند، این عنصر به شما امکان میدهد مشخص کنید که Edge کجا باید به دنبال مقادیر وضعیت بگردد. به عنوان مثال، میتواند به عنوان یک پارامتر پرس و جو یا در یک هدر HTTP ارسال شود. مقدار وضعیت معمولاً به عنوان یک اقدام امنیتی برای جلوگیری از حملات CSRF استفاده میشود.
برای مثال request.queryparam.state نشان میدهد که وضعیت باید به عنوان یک پارامتر پرسوجو، مانند ?state=HjoiuKJH32 ، ارائه شود. برای مثال، برای الزام وضعیت در یک هدر HTTP، این مقدار را روی request.header.state تنظیم کنید. همچنین به بخش درخواست توکنهای دسترسی و کدهای مجوز مراجعه کنید.
پیشفرض: | بدون ایالت |
حضور: | اختیاری |
| نوع: | رشته |
| مقادیر معتبر: | هر متغیر جریانی که در زمان اجرا برای سیاست قابل دسترسی باشد |
| با انواع کمک هزینه استفاده میشود: |
|
عنصر <StoreToken>
<StoreToken>true</StoreToken>
وقتی عنصر <ExternalAuthorization> true است، این عنصر را روی true تنظیم کنید. عنصر <StoreToken> به Apigee Edge میگوید که توکن دسترسی خارجی را ذخیره کند. در غیر این صورت، ذخیره نخواهد شد.
پیشفرض: | نادرست |
حضور: | اختیاری |
| نوع: | بولی |
| مقادیر معتبر: | درست یا غلط |
| با انواع کمک هزینه استفاده میشود: |
|
عنصر <SupportedGrantTypes>/<GrantType>
<SupportedGrantTypes> <GrantType>authorization_code</GrantType> <GrantType>client_credentials</GrantType> <GrantType>implicit</GrantType> <GrantType>password</GrantType> </SupportedGrantTypes>
انواع کمکهزینه پشتیبانیشده توسط یک نقطه پایانی توکن OAuth در Apigee Edge را مشخص میکند. یک نقطه پایانی ممکن است از چندین نوع کمکهزینه پشتیبانی کند (یعنی، یک نقطه پایانی میتواند برای توزیع توکنهای دسترسی برای چندین نوع کمکهزینه پیکربندی شود.) برای اطلاعات بیشتر در مورد نقاط پایانی، به درک نقاط پایانی OAuth مراجعه کنید. نوع کمکهزینه در درخواستهای توکن در یک پارامتر grant_type ارسال میشود.
اگر هیچ نوع کمکهزینه پشتیبانیشدهای مشخص نشده باشد، تنها انواع کمکهزینه مجاز authorization_code و implicit هستند. همچنین به عنصر <GrantType> مراجعه کنید (که یک عنصر سطح بالاتر است که برای مشخص کردن جایی که Apigee Edge باید پارامتر grant_type را که در درخواست کلاینت ارسال میشود، جستجو کند، استفاده میشود. Edge مطمئن میشود که مقدار پارامتر grant_type با یکی از انواع کمکهزینه پشتیبانیشده مطابقت دارد).
پیشفرض: | کد مجوز و ضمنی |
حضور: | مورد نیاز |
| نوع: | رشته |
| مقادیر معتبر: |
|
عنصر <Tokens>/<Token>
با عملیات ValidateToken و InvalidateToken استفاده میشود. همچنین به بخش تأیید و لغو توکنهای دسترسی مراجعه کنید. عنصر <Token> متغیر جریانی را مشخص میکند که منبع توکنی را که باید لغو شود تعریف میکند. اگر از توسعهدهندگان انتظار میرود توکنهای دسترسی را به عنوان پارامترهای پرسوجو با نام access_token ارسال کنند، برای مثال، request.queryparam.access_token استفاده کنید.
عنصر <نام کاربری>
<UserName>request.queryparam.user_name</UserName>
This element is used with the password grant type only . With the password grant type, user credentials (password and username) must be made available to the OAuthV2 policy. The <PassWord> and <UserName> elements are used to specify variables where Edge can find these values. If these elements are not specified, the policy expects to find the values (by default) in form parameters named username and password . If the values are not found, the policy throws an error. You can use the <PassWord> and <UserName> elements to reference any flow variable containing the credentials.
For example, you can pass the username in a query parameter and set the <UserName> element like this: <UserName>request.queryparam.username</UserName> . To require the username in an HTTP header, set this value to request.header.username .
The OAuthV2 policy doesn't do anything else with these credential values; Edge is simply verifying that they are present. It is up to the API developer to retrieve the values request and send them to an identity provider before the token generation policy executes.
See also Requesting access tokens and authorization codes .
Default: | request.formparam.username (a x-www-form-urlencoded and specified in the request body) |
Presence: | اختیاری |
| نوع: | رشته |
| Valid values: | Any variable setting. |
| Used with grant types: | رمز عبور |
Verifying access tokens
Once a token endpoint is set up for an API proxy, a corresponding OAuthV2 policy that specifies the VerifyAccessToken operation is attached to the Flow that exposes the protected resource.
For example, to ensure that all requests to an API are authorized, the following policy enforces access token verification:
<OAuthV2 name="VerifyOAuthAccessToken"> <Operation>VerifyAccessToken</Operation> </OAuthV2>
The policy is attached to the API resource to be protected. To ensure that all requests to an API are verified, attach the policy to the ProxyEndpoint request PreFlow, as follows:
<PreFlow>
<Request>
<Step><Name>VerifyOAuthAccessToken</Name></Step>
</Request>
</PreFlow>The following optional elements can be used to override the default settings for the VerifyAccessToken operation.
| نام | توضیحات |
|---|---|
| محدوده | A space-delimited list of scopes. Verification will succeed if at least one of the scopes listed is present in the access token. For example, the following policy will check the access token to ensure that it contains at least one of the scopes listed. If READ or WRITE is present, verification will succeed. <OAuthV2 name="ValidateOauthScopePolicy"> <Operation>VerifyAccessToken</Operation> <Scope>READ WRITE</Scope> </OAuthV2> |
| AccessToken | The variable where the access token is expected to be located. For example request.queryparam.accesstoken . By default, the access token is expected to be presented by the app in the Authorization HTTP header, according to the OAuth 2.0 specification . Use this setting if the access token is expected to be presented in a non-standard location, such as a query parameter, or an HTTP header with a name other than Authorization. |
See also Verifying access tokens and Requesting access tokens and authorization codes .
Specifying request variable locations
For each grant type, the policy makes assumptions about the location or required information in request messages. These assumptions are based on the OAuth 2.0 specification. If your apps need to deviate from the OAuth 2.0 specification, then you can specify the expected locations for each parameter. For example, when handling an authorization code, you can specify the location of the authorization code, the client ID, the redirect URI, and the scope. These can be specified as HTTP headers, query parameters, or form parameters.
The example below demonstrates how you can specify the location of required authorization code parameters as HTTP headers:
... <GrantType>request.header.grant_type</GrantType> <Code>request.header.code</Code> <ClientId>request.header.client_id</ClientId> <RedirectUri>request.header.redirect_uri</RedirectUri> <Scope>request.header.scope</Scope> ...
Or, if necessary to support your client app base, you can mix and match headers and query parameters:
... <GrantType>request.header.grant_type</GrantType> <Code>request.header.code</Code> <ClientId>request.queryparam.client_id</ClientId> <RedirectUri>request.queryparam.redirect_uri</RedirectUri> <Scope>request.queryparam.scope</Scope> ...
Only one location can be configured per parameter.
Flow variables
The flow variables defined in this table are populated when the respective OAuth policies are executed, and hence are available to other policies or applications executing in the API proxy flow.
VerifyAccessToken operation
The VerifyAccessToken operation executes, a large number of flow variables are populated in the proxy's execution context. These variables give you properties related to the access token, developer app, developer, and company. You can use an AssignMessage or JavaScript policy, for example, to read any of these variables and use them as needed later in the flow. These variables can also be useful for debugging purposes.
proxy.pathsuffix ). Explicitly setting flow.resource.name variable is not required. Where the API products are not configured with valid environments and API proxies, then flow.resource.name must explicitly be set to populate API product variables in the flow. For details on product configuration, see Using the Edge management API to Publish APIs .
Token-specific variables
| متغیرها | توضیحات |
|---|---|
organization_name | The name of the organization where the proxy is executing. |
developer.id | The ID of the developer associated with the registered client app. |
developer.app.name | The name of the developer associated with the registered client app. |
client_id | The client ID of the registered client app. |
grant_type | The grant type associated with the request. |
token_type | The token type associated with the request. |
access_token | The access token that is being verified. |
accesstoken.{custom_attribute} | A named custom attribute in the access token. |
issued_at | The date the access token was issued expressed in Unix epoch time in milliseconds. |
expires_in | The expiration time for the access token. Expressed in seconds . Although the ExpiresIn element sets the expiration in milliseconds, in the token response and flow variables, the value is expresed in seconds. |
status | The status of the access token (eg, approved or revoked). |
scope | The scope (if any) associated with the access token. |
apiproduct.<custom_attribute_name> | A named custom attribute of the API product associated with the registered client app. |
apiproduct.name | The name of the API product associated with the registered client app. |
revoke_reason | (Apigee hybrid only) Indicates why the access token is revoked. Value can be |
App-specific variables
These variables are related to the Developer App that is associated with the token.
| متغیرها | توضیحات |
|---|---|
app.name | |
app.id | |
app.accessType | |
app.callbackUrl | |
app.status | approved or revoked |
app.scopes | |
app.appFamily | |
app.apiproducts | |
app.appParentStatus | |
app.appType | For example: Developer |
app.appParentId | |
app.created_by | |
app.created_at | |
app.last_modified_at | |
app.last_modified_by | |
app.{custom_attributes} | A named custom attribute of the registered client app. |
Developer-specific variables
If the app.appType is "Company", then company attributes are populated and if app.appType is "Developer", then developer attributes are populated.
| متغیرها | توضیحات |
|---|---|
| Developer-specific variables | |
developer.id | |
developer.userName | |
developer.firstName | |
developer.lastName | |
developer.email | |
developer.status | active or inactive |
developer.apps | |
developer.created_by | |
developer.created_at | |
developer.last_modified_at | |
developer.last_modified_by | |
developer.{custom_attributes} | A named custom attribute of the developer. |
Company-specific variables
If the app.appType is "Company", then company attributes are populated and if app.appType is "Developer", then developer attributes are populated.
| متغیرها | توضیحات |
|---|---|
company.id | |
company.displayName | |
company.apps | |
company.appOwnerStatus | |
company.created_by | |
company.created_at | |
company.last_modified_at | |
company.last_modified_by | |
company.{custom_attributes} | A named custom attribute of the company. |
GenerateAuthorizationCode operation
These variables are set when the GenerateAuthorizationCode operation executes successfully:
Prefix: oauthv2authcode.{policy_name}.{variable_name}
Example: oauthv2authcode.GenerateCodePolicy.code
| متغیر | توضیحات |
|---|---|
code | The authorization code generated when the policy executes. |
redirect_uri | The redirect URI associated with the registered client app. |
scope | The optional OAuth scope passed in the client request. |
client_id | The client ID passed in the client request. |
GenerateAccessToken and RefreshAccessToken operations
These variables are set when the GenerateAccessToken and RefreshAccessToken operations execute successfully. Note that refresh token variables do not apply for the client credentials grant type flow.
Prefix: oauthv2accesstoken.{policy_name}.{variable_name}
Example: oauthv2accesstoken.GenerateTokenPolicy.access_token
| نام متغیر | توضیحات |
|---|---|
access_token | The access token that was generated. |
client_id | The client ID of the developer app associated with this token. |
expires_in | The expiry value for the token. See the <ExpiresIn> element for details. Note that in the response, expires_in is expressed in seconds . |
scope | List of available scopes configured for the token. See Working with OAuth2 scopes . |
status | Either approved or revoked . |
token_type | Is set to BearerToken . |
developer.email | The email address of the registered developer who owns the developer app associated with the token. |
organization_name | The org where the proxy executes. |
api_product_list | A list of the products associated with the token's corresponding developer app. |
refresh_count | |
refresh_token | The refresh token that was generated. Note that refresh tokens are not generated for the client credentials grant type. |
refresh_token_expires_in | The lifespan of the refresh token, in seconds. |
refresh_token_issued_at | This time value is the string representation of the corresponding 32-bit timestamp quantity. For example, 'Wed, 21 Aug 2013 19:16:47 UTC' corresponds to the timestamp value of 1377112607413. |
refresh_token_status | Either approved or revoked . |
GenerateAccessTokenImplicitGrant
These variables are set when the GenerateAccessTokenImplicit operation executes successfully for the implicit grant type flow.
Prefix: oauthv2accesstoken.{policy_name}.{variable_name}
Example: oauthv2accesstoken.RefreshTokenPolicy.access_token
| متغیر | توضیحات |
|---|---|
oauthv2accesstoken.access_token | The access token generated when the policy executes. |
oauthv2accesstoken.{policy_name}.expires_in | The expiry value for the token, in seconds. See the <ExpiresIn> element for details. |
Error reference
این بخش کدهای خطا و پیامهای خطایی را که برگردانده میشوند و متغیرهای خطا را که توسط Edge تنظیم میشوند، هنگامی که این خطمشی خطا را راهاندازی میکند، توضیح میدهد. این اطلاعات برای دانستن اینکه آیا در حال توسعه قوانین خطا برای رسیدگی به خطاها هستید، مهم است. برای کسب اطلاعات بیشتر، آنچه را که باید در مورد خطاهای خط مشی و مدیریت خطاها بدانید را ببینید.
خطاهای زمان اجرا
این خطاها ممکن است هنگام اجرای سیاست رخ دهند.
| کد خطا | وضعیت HTTP | علت | پرتاب شده توسط عملیات |
|---|---|---|---|
steps.oauth.v2.access_token_expired | 401 | رمز دسترسی منقضی شده است. | VerifyAccessToken |
steps.oauth.v2.access_token_not_approved | 401 | رمز دسترسی لغو شد. | VerifyAccessToken |
steps.oauth.v2.apiresource_doesnot_exist | 401 | منبع درخواستی هیچ یک از محصولات API مرتبط با نشانه دسترسی وجود ندارد. | VerifyAccessToken |
steps.oauth.v2.FailedToResolveAccessToken | 500 | این خطمشی انتظار داشت که یک نشانه دسترسی در متغیری که در عنصر <AccessToken> مشخص شده است پیدا کند، اما متغیر قابل حل نیست. | GenerateAccessToken |
steps.oauth.v2.FailedToResolveAuthorizationCode | 500 | این خطمشی انتظار داشت یک کد مجوز را در یک متغیر مشخص شده در عنصر <Code> پیدا کند، اما متغیر قابل حل نیست. | GenerateAuthorizationCode |
steps.oauth.v2.FailedToResolveClientId | 500 | این خطمشی انتظار داشت شناسه مشتری را در متغیری که در عنصر <ClientId> مشخص شده است پیدا کند، اما متغیر قابل حل نیست. | GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.FailedToResolveRefreshToken | 500 | این خطمشی انتظار داشت که یک نشانه تازهسازی را در متغیری که در عنصر <RefreshToken> مشخص شده است پیدا کند، اما متغیر قابل حل نیست. | RefreshAccessToken |
steps.oauth.v2.FailedToResolveToken | 500 | این خطمشی انتظار داشت که یک نشانه را در یک متغیر مشخص شده در عنصر <Tokens> پیدا کند، اما متغیر قابل حل نیست. | ValidateToken |
steps.oauth.v2.InsufficientScope | 403 | نشانه دسترسی ارائه شده در درخواست دارای محدوده ای است که با محدوده مشخص شده در خط مشی رمز دسترسی تأیید مطابقت ندارد. برای آشنایی با دامنه، به کار با دامنه های OAuth2 مراجعه کنید. | VerifyAccessToken |
steps.oauth.v2.invalid_access_token | 401 | رمز دسترسی ارسال شده از مشتری نامعتبر است. | VerifyAccessToken |
steps.oauth.v2.invalid_client | 401 | زمانی که ویژگی توجه: توصیه میشود شرایط قانون خطای موجود را تغییر دهید تا نامهای | GenerateAccessToken RefreshAccessToken |
steps.oauth.v2.InvalidRequest | 400 | این نام خطا برای چندین نوع خطا استفاده میشود، معمولاً برای پارامترهای گم شده یا نادرست ارسال شده در درخواست. اگر <GenerateResponse> روی false تنظیم شده است، از متغیرهای خطا (که در زیر توضیح داده شده است) استفاده کنید تا جزئیات مربوط به خطا، مانند نام و علت خطا را بازیابی کنید. | GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.InvalidAccessToken | 401 | سرصفحه مجوز کلمه "حامل" را ندارد که لازم است. به عنوان مثال: Authorization: Bearer your_access_token | VerifyAccessToken |
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound | 401 | پروکسی API در محصول مرتبط با رمز دسترسی نیست. نکات: مطمئن شوید که محصول مرتبط با نشانه دسترسی به درستی پیکربندی شده است. به عنوان مثال، اگر در مسیرهای منبع از حروف عام استفاده میکنید، مطمئن شوید که از حروف عام به درستی استفاده میشود. برای جزئیات بیشتر به ایجاد محصولات API مراجعه کنید. برای راهنمایی بیشتر در مورد علل این خطا، این پست انجمن Apigee را نیز ببینید. | VerifyAccessToken |
steps.oauth.v2.InvalidClientIdentifier | 500 | زمانی که ویژگی | GenerateAccessToken |
steps.oauth.v2.InvalidParameter | 500 | این خطمشی باید یک رمز دسترسی یا یک کد مجوز را مشخص کند، اما نه هر دو را. | GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
steps.oauth.v2.InvalidTokenType | 500 | عنصر <Tokens>/<Token> از شما می خواهد که نوع رمز را مشخص کنید (به عنوان مثال، refreshtoken ). اگر کلاینت از نوع اشتباه عبور کند، این خطا پرتاب می شود. | ValidateToken InvalidateToken |
steps.oauth.v2.MissingParameter | 500 | نوع پاسخ token است، اما هیچ نوع کمک مالی مشخص نشده است. | GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
steps.oauth.v2.UnSupportedGrantType | 500 | مشتری یک نوع کمک مالی را مشخص کرده است که توسط این خط مشی پشتیبانی نمی شود (در عنصر <SupportedGrantTypes> فهرست نشده است). توجه: در حال حاضر یک اشکال وجود دارد که در آن خطاهای نوع کمک مالی پشتیبانی نشده به درستی پرتاب نمی شوند. اگر یک خطای نوع اعطای پشتیبانی نشده رخ دهد، پروکسی همانطور که انتظار می رود وارد جریان خطا نمی شود. | GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
خطاهای استقرار
این خطاها ممکن است زمانی رخ دهند که یک پروکسی حاوی این خط مشی را مستقر می کنید.
| نام خطا | علت |
|---|---|
InvalidValueForExpiresIn | برای عنصر |
InvalidValueForRefreshTokenExpiresIn | برای عنصر <RefreshTokenExpiresIn> ، مقادیر معتبر اعداد صحیح مثبت و -1 هستند. |
InvalidGrantType | یک نوع کمک مالی نامعتبر در عنصر <SupportedGrantTypes> مشخص شده است. برای فهرستی از انواع معتبر به مرجع خط مشی مراجعه کنید. |
ExpiresInNotApplicableForOperation | مطمئن شوید که عملیات مشخص شده در عنصر <Operations> منقضی شده است. برای مثال، عملیات VerifyToken اینطور نیست. |
RefreshTokenExpiresInNotApplicableForOperation | مطمئن شوید که عملیات مشخص شده در عنصر <Operations> از انقضای نشانه رفرش پشتیبانی می کند. برای مثال، عملیات VerifyToken اینطور نیست. |
GrantTypesNotApplicableForOperation | مطمئن شوید که انواع کمک هزینه مشخص شده در <SupportedGrantTypes> برای عملیات مشخص شده پشتیبانی می شوند. |
OperationRequired | شما باید با استفاده از عنصر توجه: اگر عنصر |
InvalidOperation | شما باید با استفاده از عنصر توجه: اگر عنصر |
TokenValueRequired | شما باید یک مقدار نشانه <Token> را در عنصر <Tokens> مشخص کنید. |
متغیرهای خطا
این متغیرها زمانی تنظیم می شوند که این خط مشی خطایی را در زمان اجرا ایجاد کند.
<GenerateResponse> روی false تنظیم شود، این متغیرها زمانی پر می شوند که خطایی رخ دهد. اگر <GenerateResponse> true باشد، در صورت بروز خطا، این خطمشی بلافاصله پاسخی را به مشتری برمیگرداند - جریان خطا نادیده گرفته میشود و این متغیرها پر نمیشوند. برای اطلاعات بیشتر، به آنچه باید در مورد خطاهای خط مشی بدانید مراجعه کنید.| متغیرها | کجا | مثال |
|---|---|---|
fault.name=" fault_name " | fault_name نام خطا است، همانطور که در جدول خطاهای Runtime در بالا ذکر شده است. نام خطا آخرین قسمت کد خطا است. | fault.name = "InvalidRequest" |
oauthV2. policy_name .failed | policy_name نام سیاستی است که توسط کاربر مشخص شده است که خطا را ایجاد کرده است. | oauthV2.GenerateAccesstoken.failed = true |
oauthV2. policy_name .fault.name | policy_name نام سیاستی است که توسط کاربر مشخص شده است که خطا را ایجاد کرده است. | oauthV2.GenerateAccesstoken.fault.name = InvalidRequest توجه : برای عملیات VerifyAccessToken، نام خطا شامل این پسوند است: |
oauthV2. policy_name .fault.cause | policy_name نام سیاستی است که توسط کاربر مشخص شده است که خطا را ایجاد کرده است. | oauthV2.GenerateAccesstoken.cause = Required param : grant_type |
نمونه پاسخ خطا
اگر عنصر <GenerateResponse> درست باشد، این پاسخها به مشتری بازگردانده میشوند.
errorcode در پاسخ به خطا است. به متن موجود در faultstring تکیه نکنید، زیرا ممکن است تغییر کند. اگر <GenerateResponse> درست باشد، خط مشی خطاهایی را در این قالب برای عملیاتی که توکن ها و کدها را تولید می کنند، برمی گرداند. برای فهرست کامل، به مرجع پاسخ به خطای HTTP OAuth مراجعه کنید.
{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"} اگر <GenerateResponse> درست باشد، خط مشی خطاهایی را در این قالب برای تأیید و تأیید عملیات برمیگرداند. برای فهرست کامل، به مرجع پاسخ به خطای HTTP OAuth مراجعه کنید.
{ { "fault":{ "faultstring":"Invalid Access Token", "detail":{ "errorcode":"keymanagement.service.invalid_access_token" } } }
مثال قانون خطا
<FaultRule name=OAuthV2 Faults">
<Step>
<Name>AM-InvalidClientResponse</Name>
<Condition>(fault.name = "invalid_client") OR (fault.name = "InvalidClientIdentifier")</Condition>
</Step>
<Step>
<Name>AM-InvalidTokenResponse</Name>
<Condition>(fault.name = "invalid_access_token")</Condition>
</Step>
<Condition>(oauthV2.failed = true) </Condition>
</FaultRule>Policy schema
Each policy type is defined by an XML schema ( .xsd ). For reference, policy schemas are available on GitHub.
Working with the default OAuth configuration
Each organization (even a free trial org) on Apigee Edge is provisioned with an OAuth token endpoint. The endpoint is preconfigured with policies in the API proxy called oauth . You can begin using the token endpoint as soon as you create an account on Apigee Edge . For details, see Understanding OAuth endpoints .
Purging access tokens
By default, OAuth2 tokens are purged from the Apigee Edge system 3 days (259200 seconds) after both the access token and refresh token (if it exists) have expired. In some cases, you may want to change this default. For example, you may want to shorten the purge time to save disk space if a large number of tokens are being generated.
If you are on Edge for Private Cloud , you can change this default by setting organization properties as explained in this section. (The 3-day purge of expired tokens applies to Edge for Private Cloud version 4.19.01 and later. For earlier versions, the default purge interval is 180 days.)
Updating purge settings for Edge Private Cloud 4.16.01 and later versions
Note: Only tokens generated after these settings are applied are affected; the settings do not apply to tokens that were generated earlier.
- Open this file for editing:
/opt/apigee/customer/application/message-processor.properties
- Add the following property to set the number of seconds to wait before purging a token after it expires:
conf_keymanagement_oauth.access.token.purge.after.seconds=<number of seconds>
- Restart the message processor. For example:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
<ExpiresIn> and <RefreshTokenExpiresIn> attributes. Updating purge settings for Edge Private Cloud 4.15.07
Note: Only tokens generated after these settings are applied are affected; the settings do not apply to tokens that were generated earlier.
Set positive values for the
<ExpiresIn>and<RefreshTokenExpiresIn>attributes in the OAuthV2 policy. Values are in milliseconds. For example:<ExpiresIn>1000</ExpiresIn> <RefreshTokenExpiresIn>10000</RefreshTokenExpiresIn>
Redeploy the proxy.
Use this API to update the token purge properties for your organization:
POST https://<host-name>/v1/organizations/<org-name>
Payload:
<Organization name="AutomationOrganization"> <Description>Desc</Description> <Properties> <Property name="keymanagement.oauth20.access.token.purge">true</Property> <Property name="keymanagement.oauth20.access.token.purge.after.seconds">120</Property> </Properties> </Organization>Restart the message processor. For example:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
This API sets the token purge property to true for the organization called AutomationOrganization. In this case, the access token will be purged from the database 120 seconds after both the token and refresh token expire.
Non-RFC-compliant behavior
The OAuthV2 policy returns a token response that contains certain non- RFC-compliant properties. The following table shows the non-compliant properties returned by the OAuthV2 policy and the corresponding compliant properties.
| OAuthV2 returns: | The RFC-compliant property is: |
|---|---|
"token_type":"BearerToken" | "token_type":"Bearer" |
"expires_in":"3600" | "expires_in":3600(The compliant value is a number, not a string.) |
Also, the error response for an expired refresh token when grant_type = refresh_token is:
{"ErrorCode" : "InvalidRequest", "Error" :"Refresh Token expired"}However, the RFC-compliant response is:
{"error" : "invalid_grant", "error_description" :"refresh token expired"}