خط مشی DecodeJWT

شما در حال مشاهده مستندات 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 محدودیت‌های بیشتری را اعمال می‌کند، مانند حذف خودکار کاراکترهایی که الفبایی-عددی نیستند.

در صورت تمایل، از عنصر <displayname></displayname> برای برچسب‌گذاری سیاست در ویرایشگر پروکسی رابط کاربری مدیریت با یک نام متفاوت به زبان طبیعی استفاده کنید.

ناموجود مورد نیاز
ادامهخطا برای بازگرداندن خطا در صورت عدم موفقیت یک سیاست، روی false تنظیم کنید. این رفتار برای اکثر سیاست‌ها مورد انتظار است.

برای ادامه اجرای جریان حتی پس از شکست یک سیاست، روی true تنظیم شود.

نادرست اختیاری
فعال شده برای اعمال سیاست، روی true تنظیم کنید.

برای "خاموش کردن" سیاست، روی false تنظیم کنید. این سیاست حتی اگر به یک جریان متصل باقی بماند، اجرا نخواهد شد.

درست اختیاری
ناهمگام این ویژگی منسوخ شده است. نادرست منسوخ شده

<نام نمایشی>

<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 ممکن است بد شکل، نامعتبر یا غیر قابل رمزگشایی باشد.
steps.jwt.FailedToResolveVariable 401 زمانی رخ می دهد که متغیر جریان مشخص شده در عنصر <Source> خط مشی وجود نداشته باشد.
steps.jwt.InvalidToken 401 زمانی رخ می دهد که متغیر جریان مشخص شده در عنصر <Source> خط مشی خارج از محدوده باشد یا قابل حل نباشد.

خطاهای استقرار

این خطاها ممکن است زمانی رخ دهند که یک پروکسی حاوی این خط مشی را مستقر می کنید.

نام خطا علت ثابت
InvalidEmptyElement زمانی رخ می دهد که متغیر جریان حاوی JWT که باید رمزگشایی شود در عنصر <Source> خط مشی مشخص نشده باشد.

متغیرهای خطا

این متغیرها زمانی تنظیم می شوند که یک خطای زمان اجرا رخ دهد. برای اطلاعات بیشتر، به آنچه باید در مورد خطاهای خط مشی بدانید مراجعه کنید.

متغیرها کجا مثال
fault.name=" fault_name " fault_name نام خطا است، همانطور که در جدول خطاهای Runtime در بالا ذکر شده است. نام خطا آخرین قسمت کد خطا است. fault.name Matches "TokenExpired"
JWT.failed همه خط مشی های JWT متغیرهای یکسانی را در صورت خرابی تنظیم می کنند. JWT.failed = true

نمونه پاسخ خطا

کدهای خطای خط مشی JWT

برای رسیدگی به خطا، بهترین روش به دام انداختن قسمت 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>