GenerateJWS politikası

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Ne?

Yapılandırılabilir bir talep grubuyla imzalı bir JWS oluşturur. JWS daha sonra istemcilere döndürülebilir, arka uç hedeflerine iletilebilir veya başka şekillerde kullanılabilir. Ayrıntılı bir giriş için JWS ve JWT politikalarına genel bakış başlıklı makaleyi inceleyin.

JWS'nin bölümleri, şifrelenme ve imzalanma şekilleri hakkında bilgi edinmek için RFC7515'e bakın.

Video

İmzalı bir JWT oluşturmayı öğrenmek için kısa bir video izleyin. Bu video, JWT oluşturmaya özel olsa da kavramların çoğu JWS için de aynıdır.

Örnekler

HS256 algoritmasıyla imzalanmış ekli bir JWS oluşturun.

Bu örnek politika, eklenmiş bir JWS oluşturur ve bunu HS256 algoritmasını kullanarak imzalar. HS256, hem imzalamak hem de imzayı doğrulamak için paylaşılan bir gizli bilgiye dayanır.

Ekli bir JWS, kodlanmış başlığı, yükü ve imzayı içerir:

header.payload.signature

Ayrılmış içerik oluşturmak için <DetachContent> değerini doğru olarak ayarlayın. JWS'nin yapısı ve biçimi hakkında daha fazla bilgi için JWS/JWT'nin bölümleri başlıklı makaleyi inceleyin.

Ham, kodlanmamış JWS yükünü belirtmek için <Payload> öğesini kullanın. Bu örnekte, bir değişken yükü içeriyor. Bu politika işlemi tetiklendiğinde Edge, JWS başlığını ve yükünü kodlar, ardından JWS'yi dijital olarak imzalamak için kodlanmış imzayı ekler.

Aşağıdaki politika yapılandırması, private.payload değişkeninde bulunan bir yükten JWS oluşturur.

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

RS256 algoritmasıyla imzalanmış ayrılmış bir JWS oluşturun.

Bu örnek politika, ayrılmış bir JWS oluşturur ve RS256 algoritmasını kullanarak imzalar. RS256 imzası oluşturmak için RSA özel anahtarı gerekir. Bu anahtar, PEM kodlamalı biçimde sağlanmalıdır.

Ayrılmış bir JWS, JWS'den yükü çıkarır:

header..signature

Ham, kodlanmamış JWS yükünü belirtmek için <Payload> öğesini kullanın. Bu politika tetiklendiğinde Edge, JWS başlığını ve yükünü kodlar, ardından kodlanmış imzayı oluşturmak için bunları kullanır. Ancak oluşturulan JWS, yükü atlar. VerifyJWS politikasının <DetachedContent> öğesini kullanarak yükü VerifyJWS politikasına iletmek sizin sorumluluğunuzdadır.

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

Temel öğeleri ayarlama

JWS'yi oluşturmak için kullanılan anahtarı belirtmek üzere kullandığınız öğeler, seçilen algoritmaya bağlıdır. Bu öğeler aşağıdaki tabloda gösterilmektedir:

Algoritma Önemli unsurlar
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> ve <Id> öğeleri isteğe bağlıdır.

*Anahtar koşulları hakkında daha fazla bilgi için İmza şifreleme algoritmaları hakkında başlıklı makaleyi inceleyin.

Generate JWS için öğe referansı

Politika referansı, JWS oluşturma politikasının öğelerini ve özelliklerini açıklar.

Not: Yapılandırma, kullandığınız şifreleme algoritmasına bağlı olarak biraz farklılık gösterir. Belirli kullanım alanlarına yönelik yapılandırmaları gösteren örnekler için Örnekler bölümüne bakın.

Üst düzey öğe için geçerli olan özellikler

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

Aşağıdaki özellikler, tüm politika üst öğeleri için ortaktır.

Özellik Açıklama Varsayılan Varlık (Presence)
ad Politikanın dahili adı. Adda kullanabileceğiniz karakterler şunlarla sınırlıdır: A-Z0-9._\-$ %. Ancak Edge yönetim kullanıcı arayüzü, alfanümerik olmayan karakterleri otomatik olarak kaldırma gibi ek kısıtlamalar uygular.

İsteğe bağlı olarak, <displayname></displayname> öğesini kullanarak yönetim kullanıcı arayüzü proxy düzenleyicisindeki politikayı farklı bir doğal dil adıyla etiketleyin.

Yok Zorunlu
continueOnError Bir politika başarısız olduğunda hata döndürmek için false olarak ayarlayın. Bu, çoğu politika için beklenen bir davranıştır.

Bir politika başarısız olsa bile akış yürütme işleminin devam etmesi için true olarak ayarlayın.

yanlış İsteğe bağlı
etkin Politikayı zorunlu kılmak için true olarak ayarlayın.

Politikayı "kapatmak" için false olarak ayarlayın. Politika, akışa ekli kalsa bile zorunlu kılınmaz.

doğru İsteğe bağlı
eş zamansız Bu özelliğin desteği sonlandırıldı. yanlış Kullanımdan kaldırıldı

<DisplayName>

<DisplayName>Policy Display Name</DisplayName>

Politikayı yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı bir doğal dil adıyla etiketlemek için ad özelliğiyle birlikte kullanın.

Varsayılan Bu öğeyi atlarsanız politikanın ad özelliği değeri kullanılır.
Varlık (Presence) İsteğe bağlı
Tür Dize

<Algorithm>

<Algorithm>algorithm-here</Algorithm>

Jetonu imzalamak için şifreleme algoritmasını belirtir.

Varsayılan Yok
Varlık (Presence) Zorunlu
Tür Dize
Geçerli değerler 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>

Ek talep adı/değer çiftlerini JWS'nin üstbilgisine yerleştirir.

Varsayılan Yok
Varlık (Presence) İsteğe bağlı
Geçerli değerler Ek bir talep için kullanmak istediğiniz herhangi bir değer. İddiayı dize, sayı, Boole, eşlem veya dizi olarak açıkça belirtebilirsiniz.

<Claim> öğesi şu özellikleri alır:

  • name: (Zorunlu) Hak talebinin adı.
  • ref: (İsteğe bağlı) Bir akış değişkeninin adı. Bu değişken varsa politika, bu değişkenin değerini talep olarak kullanır. Hem ref özelliği hem de açık bir talep değeri belirtilirse açık değer varsayılan değer olur ve referans verilen akış değişkeni çözümlenmemişse kullanılır. başlıklı makaleyi inceleyin.
  • type: (İsteğe bağlı) Şu değerlerden biri: dize (varsayılan), sayı, Boole veya eşlem
  • array: (İsteğe bağlı) Değerin bir tür dizisi olup olmadığını belirtmek için true olarak ayarlayın. Varsayılan: false.

<CriticalHeaders>

<CriticalHeaders>a,b,c</CriticalHeaders>

or:

<CriticalHeaders ref=variable_containing_headers/>

JWS'ye önemli üstbilgi olan crit'i ekler. crit üstbilgisi, JWS alıcısı tarafından bilinmesi ve tanınması gereken üstbilgi adlarının bir dizisidir. Örneğin:

{
  “typ: “...”,
  “alg” : “...”,
  “crit” : [ “a”, “b”, “c” ],
}

Çalışma zamanında, VerifyJWS politikası crit üstbilgisini inceler. crit üstbilgisinde listelenen her üstbilgi için, VerifyJWS politikasının <KnownHeaders> öğesinin de bu üstbilgiyi listelediği kontrol edilir. VerifyJWS politikasının crit içinde bulduğu ve <KnownHeaders> içinde listelenmeyen tüm üstbilgiler, VerifyJWS politikasının başarısız olmasına neden olur.

Varsayılan Yok
Varlık (Presence) İsteğe bağlı
Tür Virgülle ayrılmış dizeler dizisi
Geçerli değerler Dizi veya diziyi içeren bir değişkenin adı.

<DetachContent>

<DetachContent>true|false</DetachContent>

JWS'nin ayrılmış bir yükle mi (<DetachContent>true</DetachContent>) yoksa ayrılmış bir yük olmadan mı (<DetachContent>false</DetachContent>) oluşturulacağını belirtir.

Varsayılan değer olan false'u belirtirseniz oluşturulan JWS şu biçimde olur:

header.payload.signature

Ayrılmış yük oluşturmak için true değerini belirtirseniz oluşturulan JWS, yükü atlar ve şu biçimde olur:

header..signature

Ayrılmış bir yükte, VerifyJWS politikası'nın <DetachedContent> öğesini kullanarak orijinal kodlanmamış yükü VerifyJWS politikasına iletmek sizin sorumluluğunuzdadır.

Varsayılan yanlış
Varlık (Presence) İsteğe bağlı
Tür Boole
Geçerli değerler doğru veya yanlış

<IgnoreUnresolvedVariables>

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

Politikada belirtilen referans verilen değişkenlerden herhangi biri çözümlenemediğinde politikanın hata vermesini istiyorsanız yanlış olarak ayarlayın. Çözülemeyen değişkenleri boş dize (null) olarak değerlendirmek için true olarak ayarlayın.

Varsayılan yanlış
Varlık (Presence) İsteğe bağlı
Tür Boole
Geçerli değerler doğru veya yanlış

<OutputVariable>

<OutputVariable>JWS-variable</OutputVariable>

Bu politika tarafından oluşturulan JWS'nin nereye yerleştirileceğini belirtir. Varsayılan olarak jws.POLICYNAME.generated_jws akış değişkenine yerleştirilir.

Varsayılan jws.POLICYNAME.generated_jws
Varlık (Presence) İsteğe bağlı
Tür Dize (bir akış değişkeni adı)

<Payload>

<Payload ref="flow-variable-name-here" />

or

<Payload>payload-value</Payload>

Kodlanmamış, ham JWS yükünü belirtir. Yükü içeren bir değişken veya dize belirtin.

başlıklı makaleyi inceleyin.
Varsayılan Yok
Varlık (Presence) Zorunlu
Tür Dize, bayt dizisi, akış veya kodlanmamış JWS yükünün başka bir gösterimi.

<PrivateKey/Id>

<PrivateKey>
  <Id ref="flow-variable-name-here"/>
</PrivateKey>

or

<PrivateKey>
  <Id>your-id-value-here</Id>
</PrivateKey>

JWS başlığına eklenecek anahtar kimliğini (kid) belirtir. Yalnızca algoritma RS256/RS384/RS512, PS256/PS384/PS512 veya ES256/ES384/ES512 olduğunda kullanın.

Varsayılan Yok
Varlık (Presence) İsteğe bağlı
Tür Dize
Geçerli değerler Akış değişkeni veya dize

<PrivateKey/Password>

<PrivateKey>
  <Password ref="private.privatekey-password"/>
</PrivateKey>

Gerekirse politikanın özel anahtarın şifresini çözmek için kullanması gereken şifreyi belirtin. Anahtarı bir akış değişkeninde iletmek için ref özelliğini kullanın. Yalnızca algoritma RS256/RS384/RS512, PS256/PS384/PS512 veya ES256/ES384/ES512 olduğunda kullanın.

Varsayılan Yok
Varlık (Presence) İsteğe bağlı
Tür Dize
Geçerli değerler Akış değişkeni referansı.

Not: Bir akış değişkeni belirtmeniz gerekir. Edge, şifrenin düz metin olarak belirtildiği politika yapılandırmasını geçersiz olarak reddeder. Akış değişkeni "private" önekini içermelidir. Örneğin, private.mypassword

<PrivateKey/Value>

<PrivateKey>
  <Value ref="private.variable-name-here"/>
</PrivateKey>

JWS'yi imzalamak için kullanılan PEM kodlamalı özel anahtarı belirtir. Bir akış değişkeninde anahtarı iletmek için ref özelliğini kullanın. Yalnızca algoritma RS256/RS384/RS512, PS256/PS384/PS512 veya ES256/ES384/ES512 olduğunda kullanın.

Varsayılan Yok
Varlık (Presence) RS256 algoritması kullanılarak JWS oluşturmak için gereklidir.
Tür Dize
Geçerli değerler PEM kodlamalı RSA özel anahtar değerini temsil eden bir dize içeren akış değişkeni.

Not: Akış değişkeni "private" önekini içermelidir. Örneğin, private.mykey

<SecretKey/Id>

<SecretKey>
  <Id ref="flow-variable-name-here"/>
</SecretKey>

or

<SecretKey>
  <Id>your-id-value-here</Id>
</SecretKey>

Bir HMAC algoritmasıyla imzalanmış JWS'nin JWS üstbilgisine eklenecek anahtar kimliğini (kid) belirtir. Yalnızca algoritma HS256/HS384/HS512 olduğunda kullanın.

Varsayılan Yok
Varlık (Presence) İsteğe bağlı
Tür Dize
Geçerli değerler Akış değişkeni veya dize

<SecretKey/Value>

<SecretKey>
  <Value ref="private.your-variable-name"/>
</SecretKey>

Jetonları HMAC algoritmasıyla doğrulamak veya imzalamak için kullanılan gizli anahtarı sağlar. Yalnızca algoritma HS256/HS384/HS512 olduğunda kullanın. Anahtarı bir akış değişkeninde iletmek için ref özelliğini kullanın.

Edge, HS256/HS384/HS512 algoritmaları için minimum anahtar gücü uygular. HS256 için minimum anahtar uzunluğu 32 bayt, HS384 için 48 bayt ve HS512 için 64 bayttır. Daha düşük güçlü bir anahtar kullanmak çalışma zamanı hatasına neden olur.

Varsayılan Yok
Varlık (Presence) HMAC algoritmaları için gereklidir.
Tür Dize
Geçerli değerler Bir dizeye atıfta bulunan akış değişkeni

Not: Akış değişkeni ise "private" önekini içermelidir. Örneğin, private.mysecret

Akış değişkenleri

JWS oluşturma politikası, akış değişkenlerini ayarlamaz.

Hata referansı

Bu bölümde, bu politika bir hatayı tetiklediğinde Edge tarafından ayarlanan hata kodları ile hata mesajları ve döndürülen hata mesajları ile Edge tarafından ayarlanan hata değişkenleri açıklanmaktadır. Hataları ele almak için hata kuralları geliştirip geliştirmediğinizi bilmeniz önemlidir. Daha fazla bilgi için Politika hataları hakkında bilmeniz gerekenler ve Hataları işleme bölümlerine bakın.

Çalışma zamanı hataları

Politika yürütüldüğünde bu hatalar ortaya çıkabilir.

Hata kodu HTTP durumu Gerçekleşme zamanı:
steps.jws.GenerationFailed 401 Politika, JWS'yi oluşturamadı.
steps.jws.InsufficientKeyLength 401 HS256 algoritmasına göre 32 bayttan küçük bir anahtar için
steps.jws.InvalidClaim 401 Eksik hak talebi veya hak talebi uyuşmazlığı ya da eksik başlık veya başlık uyuşmazlığı için.
steps.jws.InvalidCurve 401 Anahtar tarafından belirtilen eğri, Elips Biçimli Eğri algoritması için geçerli değildir.
steps.jws.InvalidJsonFormat 401 JWS üstbilgisinde geçersiz JSON bulundu.
steps.jws.InvalidPayload 401 JWS yükü geçersiz.
steps.jws.InvalidSignature 401 <DetachedContent> atlanır ve JWS'de ayrı bir içerik yükü bulunur.
steps.jws.KeyIdMissing 401 Doğrulama politikası, ortak anahtarlar için kaynak olarak bir JWKS kullanır ancak imzalanmış JWS, başlıkta bir kid özelliği içermez.
steps.jws.KeyParsingFailed 401 Ortak anahtar, verilen anahtar bilgisinden ayrıştırılamadı.
steps.jws.MissingPayload 401 JWS yükü eksik.
steps.jws.NoAlgorithmFoundInHeader 401 JWS, algoritma başlığını çıkardığında ortaya çıkar.
steps.jws.SigningFailed 401 GenerateJWS'de HS384 veya HS512 algoritmaları için minimum boyuttan daha küçük bir anahtar için
steps.jws.UnknownException 401 Bilinmeyen bir istisna oluştu.
steps.jws.WrongKeyType 401 Anahtar türü yanlış belirtilmiş. Örneğin, Elips Biçimli Eğri algoritması için RSA anahtarı veya RSA algoritması için eğri anahtarı belirtirseniz.

Dağıtım hataları

Bu hatalar, bu politikayı içeren bir proxy dağıttığınızda ortaya çıkabilir.

Hata adı Gerçekleşme zamanı:
InvalidAlgorithm Geçerli değerler şunlardır: 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

Diğer olası dağıtım hataları.

Hata değişkenleri

Bu değişkenler, çalışma zamanı hatası oluştuğunda ayarlanır. Daha fazla bilgi için Bilmeniz gerekenler hakkında daha fazla bilgi edinin.

Değişkenler Konum Örnek
fault.name="fault_name" fault_name, yukarıdaki Çalışma zamanı hataları tablosunda listelendiği gibi hatanın adıdır. Hata adı, hata kodunun son kısmıdır. fault.name Matches "TokenExpired"
JWS.failed Tüm JWS politikaları, hata durumunda aynı değişkeni ayarlar. jws.JWS-Policy.failed = true

Örnek hata yanıtı

Hata giderme için en iyi uygulama, hatanın errorcode kısmını yakalamaktır tıklayın. Değişebileceği için faultstring içindeki metne güvenmeyin.

Örnek hata kuralı

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