GenerateJWS politikası

Apigee Edge belgelerini görüntülüyorsunuz.
. Git: Apigee X belgeleri.
bilgi

Ne?

Yapılandırılabilir bir hak talebi grubu içeren imzalı bir JWS oluşturur. JWS, daha sonra arka uç hedeflerine aktarılan ya da başka şekillerde kullanılan Ayrıntılı bilgi için JWS ve JWT politikalarına genel bakış sayfasına göz atın.

JWS'nin bölümleri ve bunların nasıl şifrelenip imzalandığı hakkında bilgi edinmek için şuraya bakın: RFC7515.

Video

İmzalanmış bir JWT'nin nasıl oluşturulacağını öğrenmek için kısa bir video izleyin. Bu video, JWT oluşturmaya özgü kavramların birçoğu JWS'de aynıdır.

Örnekler

Ekte, HS256 ile imzalanmış bir JWS oluşturun algoritma

Bu örnek politika, ekli bir JWS oluşturur ve HS256 algoritmasını kullanarak imzalar. HS256 referansları hem imza hem de doğrulama için paylaşılan bir sırla.

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

header.payload.signature

Ayrı içerik oluşturmak için <DetachContent> değerini doğru olarak ayarlayın. Daha fazla bilgi için Parts of a JWS/JWT JWS'nin yapısı ve biçimi hakkında daha fazla bilgi edinin.

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

Aşağıdaki politika yapılandırması, değişkende bulunan yükten bir JWS oluşturur 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>

RS256 ile imzalanmış ayrı bir JWS oluşturun algoritma

Bu örnek politika, ayrılmış bir JWS oluşturur ve RS256 algoritmasını kullanarak imzalar. Oluşturuluyor RS256 imzası, PEM kodlu biçimde sağlanması gereken bir RSA özel anahtarını temel alır.

Çıkarılan JWS, yükü JWS'den çı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 ve sonra bunları kodlanmış imzayı oluşturmak için kullanır. Bununla birlikte oluşturulan JWS, yükü atlar. Dosyayı, VerifyJWS politikasının <DetachedContent> öğesi.

<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 için kullandığınız öğeler, seçilen algoritmaya bağlıdır. aşağıdaki tabloda gösterildiği gibi):

Algoritma Temel öğeler
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.

*Temel şartlar hakkında daha fazla bilgi için İmza şifreleme algoritmaları hakkında.

JWS Oluşturma için öğe referansı

Politika referansında, JWS Oluştur politikasının öğelerini ve özellikleri açıklanmaktadır.

Not: Yapılandırma, şifrelemeye bağlı olarak biraz farklılık gösterir. belirlemektir. Aşağıdaki örnekler için Örnekler'e bakın: yapılandırmalarına yardımcı olur.

Şu özellikler üst düzey öğeye uygula

<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 Bulunma
ad Politikanın dahili adı. Adda kullanabileceğiniz karakterler aşağıdakilerle sınırlıdır: A-Z0-9._\-$ % Bununla birlikte, Edge yönetim arayüzü, alfasayısal olmayan karakterlerin otomatik olarak kaldırılması gibi kısıtlamalara tabidir.

İsteğe bağlı olarak, <displayname></displayname> öğesini şunun için kullanın: yönetim arayüzü proxy düzenleyicisindeki politikayı farklı, doğal bir dille etiketleyin dokunun.

Yok Zorunlu
continueOnError Bir politika başarısız olduğunda hata döndürmesi için false olarak ayarlayın. Bu beklenen bir durumdur çoğu politika için geçerli olur.

Akış yürütmenin bir politikadan sonra bile devam etmesi için true olarak ayarlayın başarısız olur.

false İsteğe bağlı
etkin Politikayı uygulamak için true olarak ayarlayın.

"Kapat" için false olarak ayarlandı politika. Politika uygulanmayacak bir akışa bağlı kalsa bile uygulanabilir.

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

&lt;DisplayName&gt;

<DisplayName>Policy Display Name</DisplayName>

Yönetim kullanıcı arayüzü proxy düzenleyicisinde politikayı etiketlemek için ad özelliğine ek olarak kullanın doğal bir dille değiştirin.

Varsayılan Bu öğeyi çıkarırsanız politikanın ad özelliğinin değeri kullanılır.
Bulunma İsteğe bağlı
Tür Dize

&lt;Algorithm&gt;

<Algorithm>algorithm-here</Algorithm>

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

Varsayılan Yok
Bulunma Zorunlu
Tür Dize
Geçerli değerler HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256, PS384, PS512

&lt;AdditionalHeaders/Claim&gt;

<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ını/değer çiftlerini JWS'nin başlığına yerleştirir.

Varsayılan Yok
Bulunma İsteğe bağlı
Geçerli değerler Ek bir hak talebi için kullanmak istediğiniz herhangi bir değer. Tekliflerinizi otomatikleştirmek ve optimize etmek için dize, sayı, boole, harita veya dizi biçiminde olabilir.

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

  • name - (Zorunlu) Hak talebinin adı.
  • ref - (İsteğe bağlı) Bir akış değişkeninin adı. Varsa politika, değişkeninin hak talebi olarak kabul edildiğini gösterir. Hem bir ref özelliği hem de açık bir hak talebi değeri belirtilirse açık değer varsayılan değerdir ve başvurulan akış değişkeni çözümlenmemişse kullanılır.
  • type - (İsteğe bağlı) Şunlardan biri: dize (varsayılan), sayı, boole veya harita
  • dizi - (İsteğe bağlı) Değerin bir tür dizisi olup olmadığını belirtmek için true olarak ayarlayın. Varsayılan: false (yanlış) değerini alır.

&lt;CriticalHeaders&gt;

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

or:

<CriticalHeaders ref=’variable_containing_headers’/>

JWS'ye kritik başlık olan crit ekler. crit başlığı JWS alıcısı tarafından bilinmesi ve tanınması gereken bir başlık adları dizisidir. Örneğin:

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

Çalışma zamanında, VerifyJWS politikası crit başlığını inceler. crit başlığında listelenen her üstbilgi için <KnownHeaders> öğesinin ). VerifyJWS politikasının crit'te bulduğu herhangi bir üstbilgi aynı zamanda <KnownHeaders> içinde de listelenmeyen bir uzantı, VerifyJWS politikasının başarısız olmasına neden olur.

Varsayılan Yok
Bulunma İsteğe bağlı
Tür Virgülle ayrılmış dize dizisi
Geçerli değerler Bir dizi veya diziyi içeren bir değişkenin adı.

&lt;DetachContent&gt;

<DetachContent>true|false</DetachContent>

JWS'nin ayrılmış bir yük (<DetachContent>true</DetachContent>) ile oluşturulup oluşturulmayacağını belirtir. veya değil, <DetachContent>false</DetachContent>.

False değerini belirtirseniz varsayılan olarak oluşturulan JWS şu biçimde olur:

header.payload.signature

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

header..signature

Ayrı bir yük ile orijinal kodlanmamış yükü VerifyJWS politikasına aktarmak size kalmıştır VerifyJWS politikasının <DetachedContent> öğesini kullanarak oluşturun.

Varsayılan false
Bulunma İsteğe bağlı
Tür Boole
Geçerli değerler doğru veya yanlış

&lt;IgnoreUnresolvedVariables&gt;

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

Başvurulan herhangi bir değişken belirtildiğinde politikanın hata vermesini istiyorsanız false (yanlış) değerine ayarlayın bu politikada çözülemez. Çözümlenemeyen değişkenleri boş dize olarak ele almak için doğru değerine ayarlanır (boş).

Varsayılan false
Bulunma İsteğe bağlı
Tür Boole
Geçerli değerler doğru veya yanlış

&lt;OutputVariable&gt;

<OutputVariable>JWS-variable</OutputVariable>

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

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

&lt;Payload&gt;

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

or

<Payload>payload-value</Payload>

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

'nı inceleyin.
Varsayılan Yok
Bulunma Zorunlu
Tür Dize, bayt dizisi, akış veya kodlanmamış JWS yükünün başka bir temsili.

&lt;PrivateKey/Id&gt;

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

or

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

JWS başlığına dahil edilecek anahtar kimliğini (çocuk) belirtir. Yalnızca kullanım ile ilgili bir mesaj oluşturun.

Varsayılan Yok
Bulunma İsteğe bağlı
Tür Dize
Geçerli değerler Akış değişkeni veya dizesi

&lt;PrivateKey/Password&gt;

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

Gerekirse politikanın özel anahtarın şifresini çözmek için kullanması gereken şifreyi belirtin. Şunu kullanın: ref özelliğini kullanabilirsiniz. Yalnızca kullanım ile ilgili bir mesaj oluşturun.

Varsayılan Yok
Bulunma İ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, geçersiz bir a şifrenin şifrelenmemiş metin olarak belirtildiği politika yapılandırması. Akış değişkeni "private" ön ekine sahip olmalıdır. Örneğin, private.mypassword

&lt;PrivateKey/Value&gt;

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

JWS'yi imzalamak için kullanılan PEM kodlu özel anahtarı belirtir. anahtarın içine yerleştirin. Yalnızca algoritma RS256/RS384/RS512 değerlerinden biri olduğunda kullanın. PS256/PS384/PS512 veya ES256/ES384/ES512.

Varsayılan Yok
Bulunma RS256 algoritmasını kullanarak bir JWS oluşturmak için gereklidir.
Tür Dize
Geçerli değerler PEM kodlu RSA özel anahtar değerini temsil eden bir dize içeren akış değişkeni.

Not: Akış değişkeninin ön eki "private" olmalıdır. Örneğin, private.mykey.

&lt;SecretKey/Id&gt;

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

or

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

HMAC ile imzalanmış bir JWS'nin JWS başlığına dahil edilecek anahtar kimliğini (çocuk) belirtir. algoritmasından faydalanırsınız. Yalnızca algoritma HS256/HS384/HS512'den biri olduğunda kullanın.

Varsayılan Yok
Bulunma İsteğe bağlı
Tür Dize
Geçerli değerler Akış değişkeni veya dizesi

&lt;SecretKey/Value&gt;

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

HMAC algoritmasıyla jetonları doğrulamak veya imzalamak için kullanılan gizli anahtarı sağlar. Yalnızca kullanım olması gerekir. ref özelliğini kullanın anahtarı bir akış değişkeninde geçirecek.

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

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

Not: Akış değişkeni ise "private" ön ekine sahip olmalıdır. Örneğin, örnek, private.mysecret

Akış değişkenleri

JWS Oluştur 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>