شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
چی
یک JWS امضا شده با مجموعه ای از ادعاهای قابل تنظیم ایجاد می کند. سپس JWS می تواند به مشتریان بازگردانده شود، به اهداف پشتیبان منتقل شود یا به روش های دیگر استفاده شود. برای معرفی دقیق ، مرور کلی سیاست های JWS و JWT را ببینید.
برای آشنایی با قطعات یک JWS و نحوه رمزگذاری و امضای آنها، به RFC7515 مراجعه کنید.
ویدئو
برای یادگیری نحوه تولید یک JWT امضا شده، یک ویدیوی کوتاه تماشا کنید. در حالی که این ویدیو مختص تولید یک JWT است، بسیاری از مفاهیم برای JWS یکسان است.
نمونه ها
- یک JWS پیوست امضا شده با الگوریتم HS256 ایجاد کنید
- یک JWS جدا شده امضا شده با الگوریتم RS256 ایجاد کنید
یک JWS پیوست امضا شده با الگوریتم HS256 ایجاد کنید
این خط مشی مثال یک JWS پیوست را تولید می کند و آن را با استفاده از الگوریتم HS256 امضا می کند. HS256 به یک راز مشترک برای امضا و تأیید امضا متکی است.
یک JWS پیوست شامل سرصفحه، بار و امضای رمزگذاری شده است:
header.payload.signature
برای تولید محتوای جدا، <DetachContent>
را روی true تنظیم کنید. برای اطلاعات بیشتر در مورد ساختار و قالب یک JWS به بخشهایی از یک JWS/JWT مراجعه کنید.
از عنصر <Payload>
برای تعیین بار خام و رمزگذاری نشده JWS استفاده کنید. در این مثال، یک متغیر حاوی بار بار است. وقتی این اقدام خطمشی راهاندازی میشود، Edge سرصفحه و بار JWS را رمزگذاری میکند، سپس امضای رمزگذاریشده را برای امضای دیجیتالی JWS اضافه میکند.
پیکربندی خط مشی زیر یک JWS از یک باری که در متغیر private.payload
موجود است ایجاد میکند.
<GenerateJWS name="JWS-Generate-HS256"> <DisplayName>JWS Generate HS256</DisplayName> <Algorithm>HS256</Algorithm> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <SecretKey> <Value ref="private.secretkey"/> <Id>1918290</Id> </SecretKey> <Payload ref="private.payload" /> <OutputVariable>jws-variable</OutputVariable> </GenerateJWS>
یک JWS جدا شده امضا شده با الگوریتم RS256 ایجاد کنید
این خط مشی مثال یک JWS جدا شده تولید می کند و با استفاده از الگوریتم RS256 آن را امضا می کند. تولید امضای RS256 به یک کلید خصوصی RSA متکی است که باید به صورت کدگذاری شده با PEM ارائه شود.
یک JWS جدا شده، بار را از JWS حذف می کند:
header..signature
از عنصر <Payload>
برای تعیین بار خام و رمزگذاری نشده JWS استفاده کنید. وقتی این خطمشی راهاندازی میشود، Edge سرصفحه و بار بار JWS را رمزگذاری میکند و سپس از آنها برای تولید امضای کدگذاری شده استفاده میکند. با این حال، JWS تولید شده بار بار را حذف می کند. این شما هستید که با استفاده از عنصر <DetachedContent>
خط مشی VerifyJWS، بار را به خط مشی VerifyJWS منتقل کنید.
<GenerateJWS name="JWS-Generate-RS256"> <DisplayName>JWS Generate RS256</DisplayName> <Algorithm>RS256</Algorithm> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <PrivateKey> <Value ref="private.privatekey"/> <Password ref="private.privatekey-password"/> <Id ref="private.privatekey-id"/> </PrivateKey> <Payload ref="private.payload" /> <DetachContent>true</DetachContent> <OutputVariable>jws-variable</OutputVariable> </GenerateJWS>
تنظیم عناصر کلیدی
عناصری که برای تعیین کلید مورد استفاده برای تولید JWS استفاده می کنید به الگوریتم انتخابی بستگی دارد، همانطور که در جدول زیر نشان داده شده است:
الگوریتم | عناصر کلیدی | |
---|---|---|
HS{256/384/512} * | <SecretKey> <Value ref="private.secretkey"/> <Id>1918290</Id> </SecretKey> | |
RS/PS/ES{256/384/512} * | <PrivateKey> <Value ref="private.privatekey"/> <Password ref="private.privatekey-password"/> <Id ref="private.privatekey-id"/> </PrivateKey> عناصر | |
* برای اطلاعات بیشتر در مورد الزامات کلیدی، درباره الگوریتمهای رمزگذاری امضا را ببینید. |
مرجع عنصر برای Generate JWS
مرجع خط مشی عناصر و ویژگی های خط مشی Generate JWS را توصیف می کند.
توجه: پیکربندی بسته به الگوریتم رمزگذاری مورد استفاده شما تا حدودی متفاوت خواهد بود. برای نمونه هایی که پیکربندی ها را برای موارد استفاده خاص نشان می دهد، به نمونه ها مراجعه کنید.
ویژگی هایی که برای عنصر سطح بالا اعمال می شود
<GenerateJWS name="JWS" continueOnError="false" enabled="true" async="false">
ویژگی های زیر برای همه عناصر اصلی خط مشی مشترک است.
صفت | توضیحات | پیش فرض | حضور |
---|---|---|---|
نام | نام داخلی سیاست. نویسه هایی که می توانید در نام استفاده کنید محدود به: A-Z0-9._\-$ % . با این حال، رابط کاربری مدیریت Edge محدودیتهای بیشتری را اعمال میکند، مانند حذف خودکار کاراکترهایی که حروف عددی نیستند. به صورت اختیاری، از عنصر | N/A | مورد نیاز |
continueOnError | برای بازگرداندن خطا در صورت شکست خط مشی، روی false تنظیم کنید. این رفتار مورد انتظار برای اکثر سیاست ها است. روی | نادرست | اختیاری |
فعال شد | برای اجرای خط مشی روی true تنظیم کنید. برای "خاموش کردن" خط مشی، روی | درست است | اختیاری |
ناهمگام | این ویژگی منسوخ شده است. | نادرست | منسوخ شده است |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
علاوه بر ویژگی نام، برای برچسبگذاری خطمشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.
پیش فرض | اگر این عنصر را حذف کنید، از مقدار ویژگی نام خط مشی استفاده می شود. |
حضور | اختیاری |
تایپ کنید | رشته |
<الگوریتم>
<Algorithm>algorithm-here</Algorithm>
الگوریتم رمزگذاری را برای امضای توکن مشخص می کند.
پیش فرض | N/A |
حضور | مورد نیاز |
تایپ کنید | رشته |
مقادیر معتبر | HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256, PS384, PS512 |
<AdditionalHeaders/Claim>
<AdditionalHeaders> <Claim name='claim1'>explicit-value-of-claim-here</Claim> <Claim name='claim2' ref='variable-name-here'/> <Claim name='claim3' ref='variable-name-here' type='boolean'/> <Claim name='claim4' ref='variable-name' type='string' array='true'/> </AdditionalHeaders>
جفت(های) نام/مقدار ادعای اضافی را در سربرگ JWS قرار می دهد.
پیش فرض | N/A |
حضور | اختیاری |
مقادیر معتبر | هر مقداری که می خواهید برای ادعای اضافی استفاده کنید. شما می توانید ادعا را به طور صریح به صورت رشته، عدد، بولی، نقشه یا آرایه مشخص کنید. |
عنصر <Claim>
این ویژگی ها را می گیرد:
- نام - (لازم) نام ادعا.
- ref - (اختیاری) نام یک متغیر جریان. در صورت وجود، خط مشی از مقدار این متغیر به عنوان ادعا استفاده می کند. اگر هم یک ویژگی ref و هم مقدار ادعای صریح مشخص شده باشد، مقدار صریح پیشفرض است و اگر متغیر جریان ارجاعشده حل نشده باشد استفاده میشود.
- نوع - (اختیاری) یکی از: رشته (پیشفرض)، عدد، بولی یا نقشه
- آرایه - (اختیاری) برای نشان دادن اینکه آیا مقدار آرایه ای از انواع است، روی true تنظیم کنید. پیش فرض: نادرست.
<CriticalHeaders>
<CriticalHeaders>a,b,c</CriticalHeaders> or: <CriticalHeaders ref=’variable_containing_headers’/>
هدر بحرانی، crit را به JWS اضافه می کند. هدر crit آرایه ای از نام های هدر است که باید توسط گیرنده JWS شناخته و شناسایی شود. به عنوان مثال:
{ “typ: “...”, “alg” : “...”, “crit” : [ “a”, “b”, “c” ], }
در زمان اجرا، خط مشی VerifyJWS هدر crit را بررسی می کند. برای هر هدر فهرست شده در هدر crit ، بررسی میکند که عنصر <KnownHeaders>
سیاست VerifyJWS آن هدر را نیز فهرست کند. هر هدری که خط مشی VerifyJWS در crit پیدا کند و در <KnownHeaders>
نیز فهرست نشده باشد باعث شکست خط مشی VerifyJWS می شود.
پیش فرض | N/A |
حضور | اختیاری |
تایپ کنید | آرایه رشته ها با کاما جدا شده است |
مقادیر معتبر | یک آرایه یا نام یک متغیر حاوی آرایه. |
<DetachContent>
<DetachContent>true|false</DetachContent>
تعیین می کند که آیا JWS با یک بار جدا شده، <DetachContent>true</DetachContent>
تولید شود یا نه، <DetachContent>false</DetachContent>
.
اگر false را تعیین کنید، پیش فرض، JWS تولید شده به شکل زیر است:
header.payload.signature
اگر درست را برای ایجاد بار جدا شده مشخص کنید، JWS تولید شده پی بار را حذف می کند و به شکل زیر است:
header..signature
با یک محموله جدا شده، این شما هستید که با استفاده از عنصر <DetachedContent>
خط مشی VerifyJWS، محموله اصلی رمزگذاری نشده را به خط مشی VerifyJWS منتقل کنید.
پیش فرض | نادرست |
حضور | اختیاری |
تایپ کنید | بولی |
مقادیر معتبر | درست یا نادرست |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
اگر میخواهید وقتی هر متغیر ارجاعی مشخصشده در خطمشی غیرقابل حل است، خطمشی خطایی ایجاد کند، روی false تنظیم کنید. مقدار true را تنظیم کنید تا هر متغیر غیرقابل حلی را به عنوان یک رشته خالی (تهی) در نظر بگیرید.
پیش فرض | نادرست |
حضور | اختیاری |
تایپ کنید | بولی |
مقادیر معتبر | درست یا نادرست |
<OutputVariable>
<OutputVariable>JWS-variable</OutputVariable>
محل قرار دادن JWS تولید شده توسط این خط مشی را مشخص می کند. به طور پیش فرض در متغیر جریان jws. POLICYNAME .generated_jws
.
پیش فرض | jws. POLICYNAME .generated_jws |
حضور | اختیاری |
تایپ کنید | رشته (نام متغیر جریان) |
<Payload>
<Payload ref="flow-variable-name-here" /> or <Payload>payload-value</Payload>
محموله JWS خام و رمزگذاری نشده را مشخص می کند. یک متغیر حاوی بار یا یک رشته را مشخص کنید.
پیش فرض | N/A |
حضور | مورد نیاز |
تایپ کنید | رشته، آرایه بایت، جریان یا هر نمایش دیگری از محموله JWS رمزگذاری نشده. |
<PrivateKey/Id>
<PrivateKey> <Id ref="flow-variable-name-here"/> </PrivateKey> or <PrivateKey> <Id>your-id-value-here</Id> </PrivateKey>
شناسه کلید (کودک) را برای درج در هدر JWS مشخص می کند. فقط زمانی استفاده کنید که الگوریتم یکی از RS256/RS384/RS512، PS256/PS384/PS512، یا ES256/ES384/ES512 باشد.
پیش فرض | N/A |
حضور | اختیاری |
تایپ کنید | رشته |
مقادیر معتبر | یک متغیر جریان یا رشته |
<PrivateKey/Password>
<PrivateKey> <Password ref="private.privatekey-password"/> </PrivateKey>
در صورت لزوم، رمز عبوری را که سیاست باید برای رمزگشایی کلید خصوصی استفاده کند، مشخص کنید. از ویژگی ref برای ارسال کلید در متغیر جریان استفاده کنید. فقط زمانی استفاده کنید که الگوریتم یکی از RS256/RS384/RS512، PS256/PS384/PS512، یا ES256/ES384/ES512 باشد.
پیش فرض | N/A |
حضور | اختیاری |
تایپ کنید | رشته |
مقادیر معتبر | مرجع متغیر جریان توجه: شما باید یک متغیر جریان را مشخص کنید. Edge پیکربندی خط مشی را که در آن رمز عبور در متن ساده مشخص شده است به عنوان نامعتبر رد می کند. متغیر جریان باید دارای پیشوند خصوصی باشد. برای مثال |
<PrivateKey/Value>
<PrivateKey> <Value ref="private.variable-name-here"/> </PrivateKey>
یک کلید خصوصی رمزگذاری شده با PEM را مشخص می کند که برای امضای JWS استفاده می شود. از ویژگی ref برای ارسال کلید در متغیر جریان استفاده کنید. فقط زمانی استفاده کنید که الگوریتم یکی از RS256/RS384/RS512، PS256/PS384/PS512، یا ES256/ES384/ES512 باشد.
پیش فرض | N/A |
حضور | برای تولید JWS با استفاده از الگوریتم RS256 مورد نیاز است. |
تایپ کنید | رشته |
مقادیر معتبر | یک متغیر جریان حاوی رشته ای که یک مقدار کلید خصوصی RSA با رمزگذاری PEM را نشان می دهد. نکته: متغیر جریان باید دارای پیشوند خصوصی باشد. به عنوان مثال |
<SecretKey/Id>
<SecretKey> <Id ref="flow-variable-name-here"/> </SecretKey> or <SecretKey> <Id>your-id-value-here</Id> </SecretKey>
شناسه کلید (کودک) را مشخص می کند تا در هدر JWS یک JWS امضا شده با الگوریتم HMAC قرار گیرد. فقط زمانی استفاده کنید که الگوریتم یکی از HS256/HS384/HS512 باشد.
پیش فرض | N/A |
حضور | اختیاری |
تایپ کنید | رشته |
مقادیر معتبر | یک متغیر جریان یا رشته |
<SecretKey/Value>
<SecretKey> <Value ref="private.your-variable-name"/> </SecretKey>
کلید مخفی مورد استفاده برای تأیید یا امضای نشانه ها با الگوریتم HMAC را ارائه می دهد. فقط زمانی استفاده کنید که الگوریتم یکی از HS256/HS384/HS512 باشد. از ویژگی ref برای ارسال کلید در متغیر جریان استفاده کنید.
Edge حداقل قدرت کلید را برای الگوریتمهای HS256/HS384/HS512 اعمال میکند. حداقل طول کلید برای HS256 32 بایت، برای HS384 48 بایت و برای HS512 64 بایت است. استفاده از یک کلید با قدرت کمتر باعث خطای زمان اجرا می شود.
پیش فرض | N/A |
حضور | برای الگوریتم های HMAC مورد نیاز است. |
تایپ کنید | رشته |
مقادیر معتبر | یک متغیر جریان که به یک رشته اشاره دارد نکته: اگر یک متغیر جریان باشد، باید پیشوند "خصوصی" داشته باشد. مثلا |
متغیرهای جریان
خط مشی Generate JWS متغیرهای جریان را تنظیم نمی کند.
مرجع خطا
این بخش کدهای خطا و پیامهای خطایی را که برگردانده میشوند و متغیرهای خطا را که توسط Edge تنظیم میشوند، هنگامی که این خطمشی خطا را راهاندازی میکند، توضیح میدهد. این اطلاعات برای دانستن اینکه آیا در حال توسعه قوانین خطا برای رسیدگی به خطاها هستید، مهم است. برای کسب اطلاعات بیشتر، آنچه را که باید در مورد خطاهای خط مشی و مدیریت خطاها بدانید را ببینید.
خطاهای زمان اجرا
این خطاها ممکن است هنگام اجرای سیاست رخ دهند.
کد خطا | وضعیت HTTP | زمانی رخ می دهد |
---|---|---|
steps.jws.GenerationFailed | 401 | این خط مشی قادر به ایجاد JWS نبود. |
steps.jws.InsufficientKeyLength | 401 | برای یک کلید کمتر از 32 بایت برای الگوریتم HS256 |
steps.jws.InvalidClaim | 401 | برای ادعای مفقود یا عدم تطابق ادعا، یا عدم تطابق سرصفحه یا سرصفحه. |
steps.jws.InvalidCurve | 401 | منحنی مشخص شده توسط کلید برای الگوریتم منحنی بیضی معتبر نیست. |
steps.jws.InvalidJsonFormat | 401 | JSON نامعتبر در هدر JWS یافت شد. |
steps.jws.InvalidPayload | 401 | محموله JWS نامعتبر است. |
steps.jws.InvalidSignature | 401 | <DetachedContent> حذف شده است و JWS دارای یک بار محتوای جدا شده است. |
steps.jws.KeyIdMissing | 401 | خطمشی تأیید از یک JWKS به عنوان منبع کلیدهای عمومی استفاده میکند، اما JWS امضاشده دارای ویژگی kid در سرصفحه نیست. |
steps.jws.KeyParsingFailed | 401 | کلید عمومی از اطلاعات کلید داده شده قابل تجزیه نیست. |
steps.jws.MissingPayload | 401 | محموله JWS وجود ندارد. |
steps.jws.NoAlgorithmFoundInHeader | 401 | زمانی رخ می دهد که JWS سربرگ الگوریتم را حذف کند. |
steps.jws.SigningFailed | 401 | در GenerateJWS، برای کلیدی کمتر از حداقل اندازه الگوریتمهای HS384 یا HS512 |
steps.jws.UnknownException | 401 | یک استثنا ناشناخته رخ داد. |
steps.jws.WrongKeyType | 401 | نوع کلید اشتباه مشخص شده است. به عنوان مثال، اگر یک کلید RSA برای یک الگوریتم منحنی بیضی یا یک کلید منحنی برای یک الگوریتم RSA مشخص کنید. |
خطاهای استقرار
این خطاها ممکن است زمانی رخ دهند که یک پروکسی حاوی این خط مشی را مستقر می کنید.
نام خطا | زمانی رخ می دهد |
---|---|
InvalidAlgorithm | تنها مقادیر معتبر عبارتند از: RS256، RS384، RS512، PS256، PS384، PS512، ES256، ES384، ES512، HS256، HS384، HS512. |
| سایر خطاهای احتمالی استقرار |
متغیرهای خطا
این متغیرها زمانی تنظیم می شوند که یک خطای زمان اجرا رخ دهد. برای اطلاعات بیشتر، به آنچه باید در مورد خطاهای خط مشی بدانید مراجعه کنید.
متغیرها | کجا | مثال |
---|---|---|
fault.name=" fault_name " | fault_name نام خطا است، همانطور که در جدول خطاهای Runtime در بالا ذکر شده است. نام خطا آخرین قسمت کد خطا است. | fault.name Matches "TokenExpired" |
JWS.failed | همه خط مشی های JWS در صورت خرابی یک متغیر را تنظیم می کنند. | jws.JWS-Policy.failed = true |
نمونه پاسخ خطا
برای رسیدگی به خطا، بهترین روش به دام انداختن قسمت errorcode
در پاسخ به خطا است. به متن موجود در faultstring
تکیه نکنید، زیرا ممکن است تغییر کند.
مثال قانون خطا
<FaultRules> <FaultRule name="JWS Policy Errors"> <Step> <Name>JavaScript-1</Name> <Condition>(fault.name Matches "TokenExpired")</Condition> </Step> <Condition>JWS.failed=true</Condition> </FaultRule> </FaultRules>