شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید . اطلاعات
چه
یک JWT را بدون تأیید امضای JWT رمزگشایی میکند. این روش زمانی بیشترین کاربرد را دارد که همراه با سیاست VerifyJWT استفاده شود، زمانی که مقدار یک ادعا از درون JWT باید قبل از تأیید امضای JWT مشخص باشد.
سیاست رمزگشایی JWT صرف نظر از الگوریتمی که برای امضای JWT استفاده شده است، کار میکند. برای آشنایی بیشتر با JWS و سیاستهای JWT، به بخش «مروری بر سیاستهای JWS و JWT» مراجعه کنید.
ویدئو
برای یادگیری نحوه رمزگشایی JWT، یک ویدیوی کوتاه تماشا کنید.
نمونه: رمزگشایی یک JWT
سیاست نشان داده شده در زیر، JWT موجود در متغیر جریان var.jwt را رمزگشایی میکند. این متغیر باید وجود داشته باشد و حاوی یک JWT قابل اجرا (قابل رمزگشایی) باشد. این سیاست میتواند JWT را از هر متغیر جریانی دریافت کند.
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>var.jwt</Source> </DecodeJWT>
این خطمشی خروجی خود را در متغیرهای زمینه مینویسد تا خطمشیها یا شرایط بعدی در پروکسی API بتوانند آن مقادیر را بررسی کنند. برای فهرستی از متغیرهای تنظیمشده توسط این خطمشی، به متغیرهای جریان مراجعه کنید.
مرجع عنصر برای Decode JWT
مرجع سیاست، عناصر و ویژگیهای سیاست Decode JWT را شرح میدهد.
ویژگیهایی که به عنصر سطح بالا اعمال میشوند
<DecodeJWT name="JWT" continueOnError="false" enabled="true" async="false">
ویژگیهای زیر برای همه عناصر والد سیاست مشترک هستند.
| ویژگی | توضیحات | پیشفرض | حضور |
|---|---|---|---|
| نام | نام داخلی سیاست. کاراکترهایی که میتوانید در نام استفاده کنید به موارد زیر محدود شدهاند: A-Z0-9._\-$ % . با این حال، رابط کاربری مدیریت Edge محدودیتهای بیشتری را اعمال میکند، مانند حذف خودکار کاراکترهایی که الفبایی-عددی نیستند. در صورت تمایل، از عنصر | ناموجود | مورد نیاز |
| ادامهخطا | برای بازگرداندن خطا در صورت عدم موفقیت یک سیاست، روی false تنظیم کنید. این رفتار برای اکثر سیاستها مورد انتظار است. برای ادامه اجرای جریان حتی پس از شکست یک سیاست، روی | نادرست | اختیاری |
| فعال شده | برای اعمال سیاست، روی true تنظیم کنید. برای "خاموش کردن" سیاست، روی | درست | اختیاری |
| ناهمگام | این ویژگی منسوخ شده است. | نادرست | منسوخ شده |
<نام نمایشی>
<DisplayName>Policy Display Name</DisplayName>
علاوه بر ویژگی نام، از این ویژگی برای برچسبگذاری سیاست در ویرایشگر پروکسی رابط کاربری مدیریت با یک نام متفاوت به زبان طبیعی استفاده کنید.
| پیشفرض | اگر این عنصر را حذف کنید، از مقدار ویژگی name مربوط به سیاست استفاده میشود. |
| حضور | اختیاری |
| نوع | رشته |
<منبع>
<Source>jwt-variable</Source>
در صورت وجود، متغیر جریانی را مشخص میکند که در آن سیاست انتظار دارد JWT را برای رمزگشایی پیدا کند.
| پیشفرض | request.header.authorization (برای اطلاعات مهم در مورد پیشفرض، به یادداشت بالا مراجعه کنید). |
| حضور | اختیاری |
| نوع | رشته |
| مقادیر معتبر | نام متغیر جریان لبه |
متغیرهای جریان
پس از موفقیت، سیاست های Verify JWT و Decode JWT متغیرهای زمینه را مطابق این الگو تنظیم می کنند:
jwt.{policy_name}.{variable_name}
به عنوان مثال، اگر نام خط مشی jwt-parse-token باشد، آنگاه این خط مشی موضوع مشخص شده در JWT را در متغیر زمینه به نام jwt.jwt-parse-token.decoded.claim.sub ذخیره می کند. (برای سازگاری به عقب، در jwt.jwt-parse-token.claim.subject نیز موجود خواهد بود)
| نام متغیر | توضیحات |
|---|---|
claim.audience | ادعای مخاطبان JWT. این مقدار ممکن است یک رشته یا آرایه ای از رشته ها باشد. |
claim.expiry | تاریخ/زمان انقضا، بر حسب میلیثانیه از آن دوره بیان میشود. |
claim.issuedat | تاریخ انتشار توکن، که از آن دوره برحسب میلی ثانیه بیان میشود. |
claim.issuer | ادعای صادرکننده JWT. |
claim.notbefore | اگر JWT شامل یک ادعای nbf باشد، این متغیر حاوی مقداری خواهد بود که از آن دوره در میلی ثانیه بیان شده است. |
claim.subject | ادعای موضوع JWT. |
claim. name | ارزش ادعای نامگذاری شده (استاندارد یا اضافی) در بار. یکی از اینها برای هر ادعا در محموله تنظیم می شود. |
decoded.claim. name | مقدار JSON قابل تجزیه ادعای نامگذاری شده (استاندارد یا اضافی) در بار. برای هر ادعا در محموله یک متغیر تنظیم شده است. برای مثال، میتوانید از decoded.claim.iat برای بازیابی زمان صدور JWT، که بر حسب ثانیه از آن دوره بیان میشود، استفاده کنید. در حالی که می توانید از claim. name متغیرهای جریان، این متغیر توصیه شده برای دسترسی به ادعا است. |
decoded.header. name | مقدار قابل تجزیه JSON یک هدر در بار. یک متغیر برای هر هدر در محموله تنظیم شده است. در حالی که می توانید از header. name متغیرهای جریان، این متغیر پیشنهادی برای استفاده برای دسترسی به هدر است. |
expiry_formatted | تاریخ/زمان انقضا، به عنوان یک رشته قابل خواندن توسط انسان قالب بندی شده است. مثال: 2017-09-28T21:30:45.000+0000 |
header.algorithm | الگوریتم امضای مورد استفاده در JWT. به عنوان مثال، RS256، HS384، و غیره. برای اطلاعات بیشتر به پارامتر سرصفحه (الگوریتم) مراجعه کنید. |
header.kid | شناسه کلید، اگر هنگام تولید JWT اضافه شود. همچنین به «استفاده از مجموعه کلیدهای وب JSON (JWKS)» در نمای کلی خطمشیهای JWT برای تأیید JWT مراجعه کنید. برای اطلاعات بیشتر به پارامتر سرصفحه (شناسه کلید) مراجعه کنید. |
header.type | روی JWT تنظیم خواهد شد. |
header. name | مقدار هدر نامگذاری شده (استاندارد یا اضافی). یکی از اینها برای هر هدر اضافی در قسمت هدر JWT تنظیم می شود. |
header-json | هدر با فرمت JSON. |
is_expired | درست یا نادرست |
payload-claim-names | مجموعه ای از ادعاهای پشتیبانی شده توسط JWT. |
payload-json | محموله در قالب JSON. |
seconds_remaining | تعداد ثانیه های قبل از توکن منقضی می شود. اگر توکن منقضی شده باشد، این عدد منفی خواهد بود. |
time_remaining_formatted | زمان باقیمانده تا توکن منقضی میشود که بهصورت رشتهای قابل خواندن توسط انسان قالببندی شده است. مثال: 00:59:59.926 |
valid | در مورد VerifyJWT، این متغیر زمانی درست خواهد بود که امضا تایید شود، و زمان فعلی قبل از انقضای توکن است و بعد از مقدار notBefore توکن، در صورت وجود. در غیر این صورت نادرست. در مورد DecodeJWT، این متغیر تنظیم نشده است. |
مرجع خطا
این بخش کدهای خطا و پیامهای خطایی را که برگردانده میشوند و متغیرهای خطا را که توسط Edge تنظیم میشوند، هنگامی که این خطمشی خطا را راهاندازی میکند، توضیح میدهد. این اطلاعات برای دانستن اینکه آیا در حال توسعه قوانین خطا برای رسیدگی به خطاها هستید، مهم است. برای کسب اطلاعات بیشتر، آنچه را که باید در مورد خطاهای خط مشی و مدیریت خطاها بدانید را ببینید.
خطاهای زمان اجرا
این خطاها ممکن است هنگام اجرای سیاست رخ دهند.
| کد خطا | وضعیت HTTP | علت | ثابت |
|---|---|---|---|
steps.jwt.FailedToDecode | 401 | زمانی رخ می دهد که خط مشی قادر به رمزگشایی JWT نباشد. JWT ممکن است بد شکل، نامعتبر یا غیر قابل رمزگشایی باشد. | build |
steps.jwt.FailedToResolveVariable | 401 | زمانی رخ می دهد که متغیر جریان مشخص شده در عنصر <Source> خط مشی وجود نداشته باشد. | |
steps.jwt.InvalidToken | 401 | زمانی رخ می دهد که متغیر جریان مشخص شده در عنصر <Source> خط مشی خارج از محدوده باشد یا قابل حل نباشد. | build |
خطاهای استقرار
این خطاها ممکن است زمانی رخ دهند که یک پروکسی حاوی این خط مشی را مستقر می کنید.
| نام خطا | علت | ثابت |
|---|---|---|
InvalidEmptyElement | زمانی رخ می دهد که متغیر جریان حاوی JWT که باید رمزگشایی شود در عنصر <Source> خط مشی مشخص نشده باشد. | build |
متغیرهای خطا
این متغیرها زمانی تنظیم می شوند که یک خطای زمان اجرا رخ دهد. برای اطلاعات بیشتر، به آنچه باید در مورد خطاهای خط مشی بدانید مراجعه کنید.
| متغیرها | کجا | مثال |
|---|---|---|
fault.name=" fault_name " | fault_name نام خطا است، همانطور که در جدول خطاهای Runtime در بالا ذکر شده است. نام خطا آخرین قسمت کد خطا است. | fault.name Matches "TokenExpired" |
JWT.failed | همه خط مشی های JWT متغیرهای یکسانی را در صورت خرابی تنظیم می کنند. | JWT.failed = true |
نمونه پاسخ خطا
برای رسیدگی به خطا، بهترین روش به دام انداختن قسمت errorcode در پاسخ به خطا است. به متن موجود در faultstring تکیه نکنید، زیرا ممکن است تغییر کند.
مثال قانون خطا
<FaultRules>
<FaultRule name="JWT Policy Errors">
<Step>
<Name>JavaScript-1</Name>
<Condition>(fault.name Matches "TokenExpired")</Condition>
</Step>
<Condition>JWT.failed=true</Condition>
</FaultRule>
</FaultRules>