خط مشی GenerateJWS

شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید .
اطلاعات

چی

یک JWS امضا شده با مجموعه ای از ادعاهای قابل تنظیم ایجاد می کند. سپس JWS می تواند به مشتریان بازگردانده شود، به اهداف پشتیبان منتقل شود یا به روش های دیگر استفاده شود. برای معرفی دقیق ، مرور کلی سیاست های JWS و JWT را ببینید.

برای آشنایی با قطعات یک JWS و نحوه رمزگذاری و امضای آنها، به RFC7515 مراجعه کنید.

ویدئو

برای یادگیری نحوه تولید یک JWT امضا شده، یک ویدیوی کوتاه تماشا کنید. در حالی که این ویدیو مختص تولید یک JWT است، بسیاری از مفاهیم برای JWS یکسان است.

نمونه ها

یک 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>

عناصر <Password> و <Id> اختیاری هستند.

* برای اطلاعات بیشتر در مورد الزامات کلیدی، درباره الگوریتم‌های رمزگذاری امضا را ببینید.

مرجع عنصر برای Generate JWS

مرجع خط مشی عناصر و ویژگی های خط مشی Generate JWS را توصیف می کند.

توجه: پیکربندی بسته به الگوریتم رمزگذاری مورد استفاده شما تا حدودی متفاوت خواهد بود. برای نمونه هایی که پیکربندی ها را برای موارد استفاده خاص نشان می دهد، به نمونه ها مراجعه کنید.

ویژگی هایی که برای عنصر سطح بالا اعمال می شود

<GenerateJWS name="JWS" continueOnError="false" enabled="true" async="false">

ویژگی های زیر برای همه عناصر اصلی خط مشی مشترک است.

صفت توضیحات پیش فرض حضور
نام نام داخلی سیاست. نویسه هایی که می توانید در نام استفاده کنید محدود به: A-Z0-9._\-$ % . با این حال، رابط کاربری مدیریت Edge محدودیت‌های بیشتری را اعمال می‌کند، مانند حذف خودکار کاراکترهایی که حروف عددی نیستند.

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

N/A مورد نیاز
continueOnError برای بازگرداندن خطا در صورت شکست خط مشی، روی false تنظیم کنید. این رفتار مورد انتظار برای اکثر سیاست ها است.

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

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

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

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

<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 پیکربندی خط مشی را که در آن رمز عبور در متن ساده مشخص شده است به عنوان نامعتبر رد می کند. متغیر جریان باید دارای پیشوند خصوصی باشد. برای مثال private.mypassword

<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 را نشان می دهد.

نکته: متغیر جریان باید دارای پیشوند خصوصی باشد. به عنوان مثال private.mykey

<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 مورد نیاز است.
تایپ کنید رشته
مقادیر معتبر یک متغیر جریان که به یک رشته اشاره دارد

نکته: اگر یک متغیر جریان باشد، باید پیشوند "خصوصی" داشته باشد. مثلا private.mysecret

متغیرهای جریان

خط مشی 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.

EmptyElementForKeyConfiguration

FailedToResolveVariable

InvalidConfigurationForActionAndAlgorithmFamily

InvalidConfigurationForVerify

InvalidEmptyElement

InvalidFamiliesForAlgorithm

InvalidKeyConfiguration

InvalidNameForAdditionalClaim

InvalidNameForAdditionalHeader

InvalidPublicKeyId

InvalidPublicKeyValue

InvalidSecretInConfig

InvalidTypeForAdditionalClaim

InvalidTypeForAdditionalHeader

InvalidValueForElement

InvalidValueOfArrayAttribute

InvalidVariableNameForSecret

MissingConfigurationElement

MissingElementForKeyConfiguration

MissingNameForAdditionalClaim

MissingNameForAdditionalHeader

سایر خطاهای احتمالی استقرار

متغیرهای خطا

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

متغیرها کجا مثال
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>