شما در حال مشاهده اسناد 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='cla>im1'explicit-value-of-cl<aim-he>re/Cl<aim Claim name='claim2' ref='>varia<ble-name-here'/ Claim name='claim3' ref='>;vari<able-name-here' type='boolean'/ Claim name='cla>im<4' ref='va>riable-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-he>re&quo<t; / o>r Payloadpay<load-val>ue/Payload
محموله JWS خام و رمزگذاری نشده را مشخص می کند. یک متغیر حاوی بار یا یک رشته را مشخص کنید.
پیش فرض | N/A |
حضور | مورد نیاز |
تایپ کنید | رشته، آرایه بایت، جریان یا هر نمایش دیگری از محموله JWS رمزگذاری نشده. |
<PrivateKey/Id>
<PrivateKey> <Id ref="flow-variable-name-h>e<re"/ />Privat<eKey or >Pri<va>teKey Idyour-id-<val>u<e-here/Id />PrivateKey
شناسه کلید (کودک) را برای درج در هدر JWS مشخص می کند. فقط زمانی استفاده کنید که الگوریتم یکی از RS256/RS384/RS512، PS256/PS384/PS512، یا ES256/ES384/ES512 باشد.
پیش فرض | N/A |
حضور | اختیاری |
تایپ کنید | رشته |
مقادیر معتبر | یک متغیر جریان یا رشته |
<PrivateKey/Password>
<PrivateKey> <Password ref="private.privatekey-passw>o<rd"/ />PrivateKey
در صورت لزوم، رمز عبوری را که سیاست باید برای رمزگشایی کلید خصوصی استفاده کند، مشخص کنید. از ویژگی ref برای ارسال کلید در متغیر جریان استفاده کنید. فقط زمانی استفاده کنید که الگوریتم یکی از RS256/RS384/RS512، PS256/PS384/PS512، یا ES256/ES384/ES512 باشد.
پیش فرض | N/A |
حضور | اختیاری |
تایپ کنید | رشته |
مقادیر معتبر | مرجع متغیر جریان توجه: شما باید یک متغیر جریان را مشخص کنید. Edge پیکربندی خط مشی را که در آن رمز عبور در متن ساده مشخص شده است به عنوان نامعتبر رد می کند. متغیر جریان باید دارای پیشوند خصوصی باشد. برای مثال |
<PrivateKey/Value>
<PrivateKey> <Value ref="private.variable-name-h>e<re"/ />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-h>e<re"/ >/Secre<tKey or > Se<cr>etKey Idyour-id-<val>u<e-here/Id >/SecretKey
شناسه کلید (کودک) را مشخص می کند تا در هدر JWS یک JWS امضا شده با الگوریتم HMAC قرار گیرد. فقط زمانی استفاده کنید که الگوریتم یکی از HS256/HS384/HS512 باشد.
پیش فرض | N/A |
حضور | اختیاری |
تایپ کنید | رشته |
مقادیر معتبر | یک متغیر جریان یا رشته |
<SecretKey/Value>
<SecretKey> <Value ref="private.your-variable-n>a<me"/ >/SecretKey
کلید مخفی مورد استفاده برای تأیید یا امضای نشانه ها با الگوریتم HMAC را ارائه می دهد. فقط زمانی استفاده کنید که الگوریتم یکی از HS256/HS384/HS512 باشد. از ویژگی ref برای ارسال کلید در متغیر جریان استفاده کنید.
Edge حداقل قدرت کلید را برای الگوریتمهای HS256/HS384/HS512 اعمال میکند. حداقل طول کلید برای HS256 32 بایت، برای HS384 48 بایت و برای HS512 64 بایت است. استفاده از یک کلید با قدرت کمتر باعث خطای زمان اجرا می شود.
پیش فرض | N/A |
حضور | برای الگوریتم های HMAC مورد نیاز است. |
تایپ کنید | رشته |
مقادیر معتبر | یک متغیر جریان که به یک رشته اشاره دارد نکته: اگر یک متغیر جریان باشد، باید پیشوند "خصوصی" داشته باشد. مثلا |
متغیرهای جریان
خط مشی Generate JWS متغیرهای جریان را تنظیم نمی کند.
مرجع خطا
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Occurs when |
---|---|---|
steps.jws.GenerationFailed |
401 | The policy was unable to generate the JWS. |
steps.jws.InsufficientKeyLength |
401 | For a key less than 32 bytes for the HS256 algorithm |
steps.jws.InvalidClaim |
401 | For a missing claim or claim mismatch, or a missing header or header mismatch. |
steps.jws.InvalidCurve |
401 | The curve specified by the key is not valid for the Elliptic Curve algorithm. |
steps.jws.InvalidJsonFormat |
401 | Invalid JSON found in the JWS header. |
steps.jws.InvalidPayload |
401 | The JWS payload is invalid. |
steps.jws.InvalidSignature |
401 | <DetachedContent> is omitted and the JWS has a detached content payload. |
steps.jws.KeyIdMissing |
401 | The Verify policy uses a JWKS as a source for public keys, but the signed JWS does not
include a kid property in the header. |
steps.jws.KeyParsingFailed |
401 | The public key could not be parsed from the given key information. |
steps.jws.MissingPayload |
401 | The JWS payload is missing. |
steps.jws.NoAlgorithmFoundInHeader |
401 | Occurs when the JWS omits the algorithm header. |
steps.jws.SigningFailed |
401 | In GenerateJWS, for a key less than the minimum size for the HS384 or HS512 algorithms |
steps.jws.UnknownException |
401 | An unknown exception occurred. |
steps.jws.WrongKeyType |
401 | Wrong type of key specified. For example, if you specify an RSA key for an Elliptic Curve algorithm, or a curve key for an RSA algorithm. |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
Error name | Occurs when |
---|---|
InvalidAlgorithm |
The only valid values are: RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512, HS256, HS384, HS512. |
|
Other possible deployment errors. |
Fault variables
These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "TokenExpired" |
JWS.failed |
All JWS policies set the same variable in the case of a failure. | jws.JWS-Policy.failed = true |
Example error response
For error handling, the best practice is to trap the errorcode
part of the error
response. Do not rely on the text in the faultstring
, because it could change.
Example fault rule
<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>