درحال مشاهده اسناد Apigee Edge هستید.
به
اسناد Apigee X بروید. اطلاعات
چه
یک JWS امضاشده با مجموعهای پیکربندیپذیر از ادعاها تولید میکند. سپس JWS میتواند به کاربران برگردانده شود، به هدفهای زیرینه منتقل شود، یا به روشهای دیگر استفاده شود. برای آشنایی دقیقتر، نمای کلی خطمشیهای JWS و JWT را ببینید.
برای آشنایی با بخشهای JWS و نحوه رمزگذاری و امضای آنها، به RFC7515 مراجعه کنید.
ویدیو
برای آشنایی با نحوه تولید JWT امضاشده، ویدیو کوتاهی را تماشا کنید. اگرچه این ویدیو بهطور خاص به تولید JWT میپردازد، بسیاری از مفاهیم برای JWS یکسان هستند.
نمونهها
تولید JWS پیوستشده امضاشده با الگوریتم HS256
این خطمشی نمونه یک JWS پیوستشده تولید میکند و آن را بااستفاده از الگوریتم HS256 امضا میکند. HS256 برای امضا کردن و درستیسنجی امضا به یک رمز مشترک متکی است.
یک JWS پیوستشده حاوی سرایند، بار، و امضای کدبندیشده است:
header.payload.signature
برای تولید محتوای جداشده، <DetachContent> را روی درست تنظیم کنید.
برای اطلاعات بیشتر درباره ساختار و قالب JWS، به بخشهای JWS/JWT مراجعه کنید.
از عنصر <Payload> برای مشخص کردن محتوای خام و کدبندینشده JWS استفاده کنید.
در این مثال، متغیری حاوی پایهبار است. وقتی این کنش خطمشی راهاندازی میشود،
Edge سرصفحه و محتوای JWS را کدبندی میکند، سپس امضای کدبندیشده را برای امضای دیجیتالی JWS اضافه میکند.
پیکربندی خطمشی زیر از پایهباری که در متغیر
private.payload قرار دارد یک JWS میسازد.
<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 ارائه شود.
«امضای وب جاوااسکریپت» جداشده پایهبار را از «امضای وب جاوااسکریپت» حذف میکند:
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> عناصر |
|
| *برای اطلاعات بیشتر درباره الزامات کلید، به درباره الگوریتمهای رمزگذاری امضا مراجعه کنید. | ||
مرجع عنصر برای «تولید JWS»
مرجع خطمشی عناصر و مشخصههای خطمشی «تولید JWS» را توصیف میکند.
توجه: پیکربندی بسته به الگوریتم رمزگذاری که استفاده میکنید کمی متفاوت خواهد بود. برای مثالهایی که پیکربندیهای موارد استفاده خاص را نشان میدهد، به نمونهها مراجعه کنید.
مشخصههایی که برای عنصر سطح بالا اعمال میشود
<GenerateJWS name="JWS" continueOnError="false" enabled="true" async="false">
مشخصههای زیر برای همه عناصر والد خطمشی مشترک است.
| مشخصه | شرح | پیشفرض | حضور |
|---|---|---|---|
| نام |
نام داخلی خطمشی. نویسههایی که میتوانید در نام استفاده کنید به موارد زیر محدود میشود:
A-Z0-9._\-$ %. بااینحال، واسط کاربر مدیریت Edge محدودیتهای بیشتری را اعمال میکند،
مثلاً نویسههایی را که الفبایی عددی نیستند بهطور خودکار برمیدارد.
بهصورت اختیاری، از عنصر |
موجود نیست | الزامی |
| continueOnError |
برای برگرداندن خطا درصورت ناموفق بودن خطمشی، روی false تنظیم کنید. این رفتار برای اکثر خطمشیها
قابلانتظار است.
روی |
نادرست | اختیاری |
| فعال شد |
برای اجرای خطمشی، روی true تنظیم کنید.
برای «خاموش کردن» خطمشی، روی |
درست | اختیاری |
| غیرهمگام | این مشخصه منسوخ شده است. | نادرست | منسوخ |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
علاوهبر مشخصه نام، از این مشخصه برای برچسبگذاری خطمشی در ویرایشگر پراکسی واسط کاربر مدیریت با نامی متفاوت به زبان طبیعی استفاده کنید.
| پیشفرض | اگر این عنصر را حذف کنید، از مقدار مشخصه نام خطمشی استفاده میشود. |
| حضور | اختیاری |
| تایپ کردن | رشته |
<Algorithm>
<Algorithm>algorithm-here</Algorithm>
الگوریتم رمزگذاری را برای امضای نشان مشخص میکند.
| پیشفرض | موجود نیست |
| حضور | الزامی |
| تایپ کردن | رشته |
| مقادیر معتبر | 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 قرار میدهد.
| پیشفرض | موجود نیست |
| حضور | اختیاری |
| مقادیر معتبر | هر مقداری که میخواهید برای یک ادعای اضافی استفاده کنید. میتوانید ادعا را بهصورت صریح بهعنوان رشته، عدد، مقدار بولی، نقشه، یا آرایه مشخص کنید. |
عنصر <Claim> این مشخصهها را میپذیرد:
- نام - (الزامی) نام دعوی.
- ref - (اختیاری) نام متغیر جاری. اگر وجود داشته باشد، خطمشی از مقدار این متغیر بهعنوان ادعا استفاده خواهد کرد. اگر هم مشخصه ref و هم مقدار ادعای صریح مشخص شده باشد، مقدار صریح مقدار پیشفرض است و اگر متغیر جاریسازی ارجاعدادهشده حلنشده باشد، استفاده میشود.
- نوع - (اختیاری) یکی از این موارد: رشته (پیشفرض)، عدد، مقدار منطقی، یا نقشه
- آرایه - (اختیاری) برای نشان دادن اینکه مقدار آرایهای از انواع است، روی درست تنظیم کنید. پیشفرض: نادرست.
<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 ناموفق باشد.
| پیشفرض | موجود نیست |
| حضور | اختیاری |
| تایپ کردن | آرایه رشتههای جداشده با کاما |
| مقادیر معتبر | یا آرایه یا نام متغیری که حاوی آرایه است. |
<DetachContent>
<DetachContent>true|false</DetachContent>
مشخص میکند که آیا JWS با محتوای جداشده تولید شود، <DetachContent>true</DetachContent>،
یا نه، <DetachContent>false</DetachContent>.
اگر مقدار false را مشخص کنید (مقدار پیشفرض)، JWS تولیدشده بهصورت زیر است:
header.payload.signature
اگر مقدار true را برای ایجاد محتوای جداشده مشخص کنید، محتوای تولیدشده JWS محتوا را حذف میکند و بهصورت زیر است:
header..signature
با پایهبار جداشده، این شما هستید که باید پایهبار اصلی کدبندینشده را بااستفاده از عنصر <DetachedContent> خطمشی VerifyJWS به خطمشی VerifyJWS
منتقل کنید.
| پیشفرض | نادرست |
| حضور | اختیاری |
| تایپ کردن | بولی |
| مقادیر معتبر | درست یا نادرست |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
اگر میخواهید وقتی هریک از متغیرهای ارجاعشده مشخصشده در خطمشی غیرقابلحل است، خطمشی خطا ایجاد کند، آن را روی «نادرست» تنظیم کنید. برای اینکه هر متغیر غیرقابلحلی بهعنوان رشته خالی (تهی) درنظر گرفته شود، روی درست تنظیم کنید.
| پیشفرض | نادرست |
| حضور | اختیاری |
| تایپ کردن | بولی |
| مقادیر معتبر | درست یا نادرست |
<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 خام و کدبندینشده را مشخص میکند. متغیری حاوی پایهبار یا رشتهای را مشخص کنید.
| پیشفرض | موجود نیست |
| حضور | الزامی |
| تایپ کردن | رشته، آرایه بایت، جاریسازی، یا هر نمایش دیگری از محتوای JWS کدبندینشده. |
<PrivateKey/Id>
<PrivateKey> <Id ref="flow-variable-name-here"/> </PrivateKey> or <PrivateKey> <Id>your-id-value-here</Id> </PrivateKey>
شناسه کلید (kid) را که باید در سرایند JWS گنجانده شود مشخص میکند. فقط زمانی استفاده کنید که الگوریتم یکی از این موارد باشد: RS256/RS384/RS512، PS256/PS384/PS512، یا ES256/ES384/ES512.
| پیشفرض | موجود نیست |
| حضور | اختیاری |
| تایپ کردن | رشته |
| مقادیر معتبر | متغیر یا رشته جاری |
<PrivateKey/Password>
<PrivateKey> <Password ref="private.privatekey-password"/> </PrivateKey>
درصورت لزوم، گذرواژهای را که خطمشی باید برای رمزگشایی کلید خصوصی استفاده کند مشخص کنید. از ویژگی ref برای انتقال کلید در متغیر جاری استفاده کنید. فقط زمانی استفاده کنید که الگوریتم یکی از این موارد باشد: RS256/RS384/RS512، PS256/PS384/PS512، یا ES256/ES384/ES512.
| پیشفرض | موجود نیست |
| حضور | اختیاری |
| تایپ کردن | رشته |
| مقادیر معتبر |
ارجاع متغیر جریان.
توجه: باید متغیر جاریسازی را مشخص کنید. Edge پیکربندی خطمشیای را که در آن گذرواژه بهصورت متن ساده مشخص شده است بهعنوان نامعتبر رد میکند. متغیر جاری باید پیشوند «private» داشته باشد. برای مثال، |
<PrivateKey/Value>
<PrivateKey> <Value ref="private.variable-name-here"/> </PrivateKey>
کلید خصوصی کدبندیشده با PEM را که برای امضای JWS استفاده میشود مشخص میکند. از مشخصه ref برای انتقال کلید در متغیر جاری استفاده کنید. فقط زمانی استفاده کنید که الگوریتم یکی از RS256/RS384/RS512، PS256/PS384/PS512، یا ES256/ES384/ES512 باشد.
| پیشفرض | موجود نیست |
| حضور | برای تولید JWS بااستفاده از الگوریتم RS256 الزامی است. |
| تایپ کردن | رشته |
| مقادیر معتبر |
متغیر جریانی که حاوی رشتهای است که مقدار کلید خصوصی RSA کدبندیشده با PEM را نشان میدهد.
توجه: متغیر جاری باید پیشوند «خصوصی» داشته باشد. برای مثال،
|
<SecretKey/Id>
<SecretKey> <Id ref="flow-variable-name-here"/> </SecretKey> or <SecretKey> <Id>your-id-value-here</Id> </SecretKey>
شناسه کلید (kid) را مشخص میکند تا در سرایند JWS یک JWS که با الگوریتم HMAC امضا شده است اضافه شود. فقط زمانی استفاده کنید که الگوریتم یکی از HS256/HS384/HS512 باشد.
| پیشفرض | موجود نیست |
| حضور | اختیاری |
| تایپ کردن | رشته |
| مقادیر معتبر | متغیر یا رشته جاری |
<SecretKey/Value>
<SecretKey> <Value ref="private.your-variable-name"/> </SecretKey>
کلید رمزی را که برای درستیسنجی یا امضا کردن نشانها با الگوریتم HMAC استفاده میشود ارائه میدهد. فقط زمانی استفاده کنید که الگوریتم یکی از HS256/HS384/HS512 باشد. از مشخصه ref برای انتقال کلید در متغیر جاری استفاده کنید.
Edge حداقل قدرت کلید را برای الگوریتمهای HS256/HS384/HS512 اعمال میکند. حداقل طول کلید برای HS256، ۳۲ بایت، برای HS384، ۴۸ بایت، و برای HS512، ۶۴ بایت است. استفاده از کلید با قدرت کمتر باعث خطای زمان اجرا میشود.
| پیشفرض | موجود نیست |
| حضور | برای الگوریتمهای HMAC لازم است. |
| تایپ کردن | رشته |
| مقادیر معتبر |
متغیر جاریسازی که به رشتهای ارجاع میدهد
توجه: اگر متغیر جاری باشد، باید پیشوند «خصوصی» داشته باشد. برای
مثال، |
متغیرهای جریان
خطمشی «تولید JWS» متغیرهای جریان را تنظیم نمیکند.
مرجع خطا
این بخش کدهای خطا و پیامهای خطایی را که برگردانده میشوند و متغیرهای خطایی را که Edge هنگام راهاندازی خطا در این خطمشی تنظیم میکند شرح میدهد. این اطلاعات برای زمانی که درحال توسعه قوانین خطا برای مدیریت خطاها هستید مهم است. برای کسب اطلاعات بیشتر، آنچه باید درباره خطاهای خطمشی بدانید و رسیدگی به خطاها را ببینید.
خطاهای زمان اجرا
این خطاها ممکن است هنگام اجرای خطمشی رخ دهند.
| کد خطا | وضعیت HTTP | وقتی رخ میدهد |
|---|---|---|
steps.jws.GenerationFailed |
401 | خطمشی نتوانست JWS را تولید کند. |
steps.jws.InsufficientKeyLength |
401 | برای کلید کمتر از ۳۲ بایت برای الگوریتم 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>