Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Ne
İstemcilerden veya diğer sistemlerden alınan bir JWT'deki imzayı doğrular. Bu politika, hak taleplerini bağlam değişkenlerine de çıkarır. Böylece sonraki politikalar veya koşullar, yetkilendirme ya da yönlendirme kararları vermek için bu değerleri inceleyebilir. Ayrıntılı tanıtım için JWS ve JWT politikalarına genel bakış başlıklı makaleyi inceleyin.
Bu politika uygulandığında Edge, JWT'nin imzasını doğrular ve JWT'nin geçerlilik bitiş tarihine göre geçerli olduğunu ve varsa JWT'nin imzalanmadan önce olmadığını doğrular. Politika isteğe bağlı olarak JWT'deki belirli hak taleplerinin değerlerini (ör. konu, kartı veren kuruluş, kitle veya ek hak taleplerinin değeri) de doğrulayabilir.
JWT doğrulanır ve geçerliyse JWT kapsamındaki tüm hak talepleri, sonraki politikalar veya koşullar tarafından kullanılmak üzere bağlam değişkenlerine aktarılır ve isteğin devam etmesine izin verilir. JWT imzası doğrulanamazsa veya JWT, zaman damgalarından biri nedeniyle geçersizse tüm işleme durur ve yanıtta bir hata döndürülür.
JWT'nin parçaları ve nasıl şifrelenip imzalandığı hakkında bilgi edinmek için RFC7519 sayfasına bakın.
Video
JWT'de imzayı nasıl doğrulayacağınızı öğrenmek için kısa bir video izleyin.
Örnekler
- HS256 algoritmasıyla imzalanmış bir JWT'yi doğrulama
- RS256 algoritmasıyla imzalanmış bir JWT'yi doğrulama
HS256 algoritmasıyla imzalanmış bir JWT doğrulama
Bu örnek politika, HS256 şifreleme algoritmasıyla (SHA-256 sağlaması) HMAC kullanılarak imzalanan bir JWT'yi doğrular. JWT, proxy isteğinde jwt
adlı bir form parametresi kullanılarak iletilir. Anahtar, private.secretkey
adlı bir değişkende yer alıyor.
Politikadan nasıl istekte bulunulacağını da içeren eksiksiz bir örnek için yukarıdaki videoyu izleyin.
Politika yapılandırması; Edge'in JWT'nin kodunu çözmesi ve değerlendirmesi için gereken bilgileri içerir. Örneğin, JWT'nin nerede bulunacağı (Kaynak öğesinde belirtilen bir akış değişkeninde), gerekli imzalama algoritması, gizli anahtarın nerede bulunacağı (örneğin Edge KVM'den alınmış olabilecek bir Edge akış değişkeninde saklanır) ve bir dizi gerekli talep ve bunların değerleri.
<VerifyJWT name="JWT-Verify-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Algorithm>HS256</Algorithm> <Source>request.formparam.jwt</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <SecretKey encoding="base64"> <Value ref="private.secretkey"/> </SecretKey> <Subject>monty-pythons-flying-circus</Subject> <Issuer>urn://apigee-edge-JWT-policy-test</Issuer> <Audience>fans</Audience> <AdditionalClaims> <Claim name="show">And now for something completely different.</Claim> </AdditionalClaims> </VerifyJWT>
Politika, çıktısını bağlam değişkenlerine yazar. Böylece, API proxy'sinde sonraki politikalar veya koşullar bu değerleri inceleyebilir. Bu politika tarafından ayarlanan değişkenlerin listesi için Akış değişkenleri bölümüne bakın.
RS256 algoritmasıyla imzalanmış bir JWT doğrulama
Bu örnek politika, RS256 algoritmasıyla imzalanmış bir JWT'yi doğrular. Doğrulamak için ortak anahtarı sağlamanız gerekir. JWT, proxy isteğinde jwt
adlı bir form parametresi kullanılarak iletilir. Ortak anahtar, public.publickey
adlı bir değişkende yer alıyor.
Politikadan nasıl istekte bulunulacağını da içeren eksiksiz bir örnek için yukarıdaki videoyu izleyin.
Bu örnek politikadaki her öğeyle ilgili koşullar ve seçenekler hakkında ayrıntılı bilgi için Öğe referansına bakın.
<VerifyJWT name="JWT-Verify-RS256"> <Algorithm>RS256</Algorithm> <Source>request.formparam.jwt</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <PublicKey> <Value ref="public.publickey"/> </PublicKey> <Subject>apigee-seattle-hatrack-montage</Subject> <Issuer>urn://apigee-edge-JWT-policy-test</Issuer> <Audience>urn://c60511c0-12a2-473c-80fd-42528eb65a6a</Audience> <AdditionalClaims> <Claim name="show">And now for something completely different.</Claim> </AdditionalClaims> </VerifyJWT>
Yukarıdaki yapılandırma için şu başlığa sahip bir JWT...
{ "typ" : "JWT", "alg" : "RS256" }
Ve bu yük ...
{ "sub" : "apigee-seattle-hatrack-montage", "iss" : "urn://apigee-edge-JWT-policy-test", "aud" : "urn://c60511c0-12a2-473c-80fd-42528eb65a6a", "show": "And now for something completely different." }
... imza sağlanan ortak anahtarla doğrulanabilirse geçerli olarak kabul edilir.
Aynı başlığa ancak bu yüke sahip bir JWT ...
{ "sub" : "monty-pythons-flying-circus", "iss" : "urn://apigee-edge-JWT-policy-test", "aud" : "urn://c60511c0-12a2-473c-80fd-42528eb65a6a", "show": "And now for something completely different." }
... JWT'deki "sub" hak talebi, politika yapılandırmasında belirtilen "Subject" öğesi için gereken değerle eşleşmediğinden imza doğrulanabilir olsa bile geçersiz olarak belirlenecektir.
Politika, çıktısını bağlam değişkenlerine yazar. Böylece, API proxy'sinde sonraki politikalar veya koşullar bu değerleri inceleyebilir. Bu politika tarafından ayarlanan değişkenlerin listesi için Akış değişkenleri bölümüne bakın.
Temel unsurları ayarlama
JWT'yi doğrulamak için kullanılan anahtarı belirtmek için kullandığınız öğeler, aşağıdaki tabloda gösterildiği gibi seçilen algoritmaya bağlıdır:
Algoritma | Temel unsurlar | |
---|---|---|
HS* |
<SecretKey encoding="base16|hex|base64|base64url"> <Value ref="private.secretkey"/> </SecretKey> |
|
RS*, İspanya*, PS* | <PublicKey> <Value ref="rsa_public_key_or_value"/> </PublicKey> veya: <PublicKey> <Certificate ref="signed_cert_val_ref"/> </PublicKey> veya: <PublicKey> <JWKS ref="jwks_val_or_ref"/> </PublicKey> |
|
*Anahtar şartları hakkında daha fazla bilgi için İmza şifreleme algoritmaları hakkında konusuna bakın. |
Öğe referansı
Politika referansında, JWT'yi Doğrula politikasının öğeleri ve özellikleri açıklanmaktadır.
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
<VerifyJWT name="JWT" continueOnError="false" enabled="true" async="false">
Aşağıdaki özellikler, tüm politika üst öğelerinde ortaktır.
Özellik | Açıklama | Varsayılan | Bulunma |
---|---|---|---|
ad |
Politikanın dahili adı. Adda kullanabileceğiniz karakterler şunlarla sınırlıdır:
A-Z0-9._\-$ % . Bununla birlikte, Edge yönetim kullanıcı arayüzü, alfanümerik olmayan karakterlerin otomatik olarak kaldırılması gibi ek kısıtlamalar uygular.
İsteğe bağlı olarak, politikayı yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı bir doğal dil adıyla etiketlemek için |
Yok | Gerekli |
continueOnError |
Bir politika başarısız olduğunda hata döndürülmesi için false olarak ayarlayın. Bu, çoğu politika için beklenen davranıştır.
Bir politika başarısız olduktan sonra bile akış yürütülmesinin devam etmesi için |
false | İsteğe bağlı |
etkin |
Politikayı uygulamak için true değerine ayarlayın.
Politikayı "devre dışı bırakmak" için |
true | İsteğe bağlı |
async | Bu özellik kullanımdan kaldırıldı. | false | Kullanımdan kaldırıldı |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
Yönetim arayüzü proxy düzenleyicisinde politikayı farklı bir doğal dil adıyla etiketlemek için name özelliğine ek olarak kullanın.
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 |
<Algorithm>
<Algorithm>HS256</Algorithm>
Jetonu imzalayacak şifreleme algoritmasını belirtir. RS*/PS*/ES* algoritmaları bir ortak/gizli anahtar çifti kullanırken HS* algoritmaları, paylaşılan bir gizli anahtar kullanır. İmza şifreleme algoritmaları hakkında başlıklı makaleyi de inceleyin.
Virgülle ayrılmış birden çok değer belirtebilirsiniz. Örneğin, "HS256, HS512" veya "RS256, PS256". Ancak belirli bir anahtar türü gerektirdiğinden HS* algoritmalarını diğer algoritmalarla veya ES* algoritmalarını diğer algoritmalarla birleştiremezsiniz. RS* ve PS* algoritmalarını birleştirebilirsiniz.
Varsayılan | Yok |
Bulunma | Gerekli |
Tür | Virgülle ayrılmış değerler dizesi |
Geçerli değerler | HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256, PS384, PS512 |
<Audience>
<Audience>audience-here</Audience> or: <Audience ref='variable-name-here'/>
Politika, JWT'deki kitle hak talebinin yapılandırmada belirtilen değerle eşleştiğini doğrular. Eşleşme yoksa politika hata verir. Bu hak talebi, JWT'nin amaçlandığı alıcıları tanımlar. Bu, RFC7519'da belirtilen kayıtlı hak taleplerinden biridir.
Varsayılan | Yok |
Bulunma | İsteğe bağlı |
Tür | Dize |
Geçerli değerler | Kitleyi tanımlayan bir akış değişkeni veya dize. |
<AdditionalClaims/Claims> (EkHak Talebi/Hak Talebi)
<AdditionalClaims> <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'/> </AdditionalClaims> or: <AdditionalClaims ref='claim_payload'/>
JWT yükünün belirtilen ek talepleri içerdiğini ve iddia edilen iddia değerlerinin eşleştiğini doğrular.
Ek hak talebinde, standart, kayıtlı JWT hak talebi adlarından biri olmayan bir ad kullanılıyor. Ek talebin değeri bir dize, sayı, boole, harita veya dizi olabilir. Harita, basit bir şekilde ifade etmek gerekirse, bir dizi ad/değer çiftinden oluşur. Bu türlerin herhangi birindeki talebin değeri, politika yapılandırmasında açıkça belirtilebilir veya dolaylı olarak bir akış değişkenine referansla belirtilebilir.
Varsayılan | Yok |
Bulunma | İsteğe bağlı |
Tür | Dize, sayı, boole veya harita |
Dizi | Değerin bir tür dizisi olup olmadığını belirtmek için true olarak ayarlayın. Varsayılan: false |
Geçerli değerler | Ek hak talebi için kullanmak istediğiniz herhangi bir değer. |
<Claim>
öğesi şu özellikleri alır:
- name - (Zorunlu) Hak talebinin adı.
- ref - (İsteğe bağlı) Bir akış değişkeninin adı. Politika varsa bu değişkenin değerini iddia olarak kullanır. Hem ref özelliği hem de açık hak talebi değeri belirtilirse açıkça belirtilen değer varsayılan değer olur 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
- array - (İsteğe bağlı) Değerin bir tür dizisi olup olmadığını belirtmek için true olarak ayarlayın. Varsayılan: false.
<Claim>
öğesini eklediğinizde, politikayı yapılandırırken hak talebi adları statik olarak ayarlanır. Alternatif olarak, hak talebi adlarını belirtmek için bir JSON nesnesi aktarabilirsiniz.
JSON nesnesi değişken olarak iletildiğinden, hak talebi adları çalışma zamanında belirlenir.
Örneğin:
<AdditionalClaims ref='json_claims'/>
Burada, json_claims
değişkeni şu biçimde bir JSON nesnesi içerir:
{ "sub" : "person@example.com", "iss" : "urn://secure-issuer@example.com", "non-registered-claim" : { "This-is-a-thing" : 817, "https://example.com/foobar" : { "p": 42, "q": false } } }
<Ek Başlık/Hak Talebi>
<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>
JWT başlığının belirtilen ek hak talebi adı/değer çiftini içerdiğini ve iddia edilen hak talebi değerlerinin eşleştiğini doğrular.
Ek hak talebi, standart, kayıtlı JWT hak talebi adlarından biri olmayan bir ad kullanıyor. Ek talebin değeri; dize, sayı, boole, harita veya dizi olabilir. Harita, basit bir şekilde ifade etmek gerekirse, bir dizi ad/değer çiftinden oluşur. Bu türlerin herhangi birindeki talebin değeri, politika yapılandırmasında açıkça belirtilebilir veya dolaylı olarak bir akış değişkenine referansla belirtilebilir.
Varsayılan | Yok |
Bulunma | İsteğe bağlı |
Tür |
Dize (varsayılan), sayı, boole veya harita. Herhangi bir tür belirtilmezse tür varsayılan olarak Dize olur. |
Dizi | Değerin bir tür dizisi olup olmadığını belirtmek için true olarak ayarlayın. Varsayılan: false |
Geçerli değerler | Ek hak talebi için kullanmak istediğiniz herhangi bir değer. |
<Claim>
öğesi şu özellikleri alır:
- name - (Zorunlu) Hak talebinin adı.
- ref - (İsteğe bağlı) Bir akış değişkeninin adı. Politika varsa bu değişkenin değerini iddia olarak kullanır. Hem ref özelliği hem de açık hak talebi değeri belirtilirse açıkça belirtilen değer varsayılan değer olur 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
- array - (İsteğe bağlı) Değerin bir tür dizisi olup olmadığını belirtmek için true olarak ayarlayın. Varsayılan: false.
<CustomClaims>
Not: Şu anda kullanıcı arayüzü üzerinden yeni bir GenerateJWT politikası eklediğinizde bir CustomClaims öğesi ekleniyor. Bu öğe çalışmıyor ve yoksayıldı. Bunun yerine kullanılacak doğru öğe, <AdditionalClaims> öğesidir. Kullanıcı arayüzü, doğru öğeleri daha sonra eklemek için güncellenecektir.
<Kimlik>
<Id>explicit-jti-value-here</Id> -or- <Id ref='variable-name-here'/> -or- <Id/>
JWT'nin belirli jti talebine sahip olduğunu doğrular. Metin değeri ve ref özelliği boş olduğunda politika, rastgele UUID içeren bir jti oluşturur. JWT kimliği (jti) talebi, JWT için benzersiz bir tanımlayıcıdır. jti hakkında daha fazla bilgi için RFC7519'a bakın.
Varsayılan | Yok |
Bulunma | İsteğe bağlı |
Tür | Dize veya referans. |
Geçerli değerler | Kimliği içeren akış değişkeninin bir dize veya adı. |
<IgnoreCriticalHeaders>
<IgnoreCriticalHeaders>true|false</IgnoreCriticalHeaders>
JWT'nin crit başlığında listelenen herhangi bir başlık <KnownHeaders>
öğesinde listelenmediğinde politikanın hata vermesini istiyorsanız false (yanlış) değerine ayarlayın.
DoğrulamaJWT politikasının crit üstbilgisini yoksaymasına neden olması için true (doğru) değerine ayarlayın.
Bu öğenin doğru değerine ayarlanmasının nedenlerinden biri, bir test ortamındaysanız ve eksik bir başlıkta hataya neden olmaya henüz hazır değilseniz olabilir.
Varsayılan | false |
Bulunma | İsteğe bağlı |
Tür | Boole |
Geçerli değerler | doğru veya yanlış |
<IgnoreIssuedAt>
<IgnoreIssuedAt>true|false</IgnoreIssuedAt>
Bir JWT, gelecekteki bir saati belirten iat
(Yayınlanma zamanı) iddiası içerdiğinde politikanın hata vermesini istiyorsanız false (varsayılan) değerine ayarlayın.
Politikanın, doğrulama sırasında iat
politikasını yok sayması için true (doğru) değerine ayarlayın.
Varsayılan | false |
Bulunma | İsteğe bağlı |
Tür | Boole |
Geçerli değerler | doğru veya yanlış |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
Politikada belirtilen referans verilen herhangi bir değişken çözümlenemez durumda olduğunda politikanın hata vermesini istiyorsanız "false" (yanlış) değerine ayarlayın. Çözümlenemeyen değişkenleri boş dize (null) olarak ele almak için değeri true olarak ayarlayın.
Varsayılan | false |
Bulunma | İsteğe bağlı |
Tür | Boole |
Geçerli değerler | doğru veya yanlış |
<Issuer>
<Issuer ref='variable-name-here'/> <Issuer>issuer-string-here</Issuer>
Politika, JWT'deki yayıncının yapılandırma öğesinde belirtilen dizeyle eşleştiğini doğrular. JWT'yi veren kuruluşu tanımlayan bir hak talebi. Bu, RFC7519'da belirtilen kayıtlı hak taleplerinden biridir.
Varsayılan | Yok |
Bulunma | İsteğe bağlı |
Tür | Dize veya referans |
Geçerli değerler | Hepsi |
<KnownHeaders>
<KnownHeaders>a,b,c</KnownHeaders> or: <KnownHeaders ref=’variable_containing_headers’/>
GenerateJWT politikası, bir JWT'deki crit başlığını doldurmak için <CriticalHeaders>
öğesini kullanır. Örneğin:
{ “typ: “...”, “alg” : “...”, “crit” : [ “a”, “b”, “c” ], }
DoğrulamaJWT politikası, JWT'deki crit başlığını (varsa) inceler ve listelenen her başlık için <KnownHeaders>
öğesinin bu başlığı da listeleyip listelemediğini kontrol eder. <KnownHeaders>
öğesi, crit'te listelenen öğelerin üst kümesini içerebilir.
Yalnızca crit'te listelenen tüm başlıkların <KnownHeaders>
öğesinde listelenmesi gerekir. Politikanın crit'te bulduğu ancak <KnownHeaders>
içinde de listelenmeyen herhangi bir başlık, VerificationJWT politikasının başarısız olmasına neden olur.
İsterseniz <IgnoreCriticalHeaders>
öğesini true
değerine ayarlayarak VerificationJWT politikasını crit üst bilgisini yok sayacak şekilde yapılandırabilirsiniz.
Varsayılan | Yok |
Bulunma | İsteğe bağlı |
Tür | Virgülle ayrılmış dize dizisi |
Geçerli değerler | Dizi veya diziyi içeren değişkenin adı. |
<PublicKey/Sertifika>
<PublicKey> <Certificate ref="signed_public.cert"/> </PublicKey> -or- <PublicKey> <Certificate> -----BEGIN CERTIFICATE----- cert data -----END CERTIFICATE----- </Certificate> </PublicKey>
JWT'deki imzayı doğrulamak için kullanılan imzalı sertifikayı belirtir. İmzalanmış sertifikayı bir akış değişkeninde geçirmek için ref özelliğini kullanın veya PEM kodlu sertifikayı doğrudan belirtin. Yalnızca algoritma RS256/RS384/RS512, PS256/PS384/PS512 veya ES256/ES384/ES512 değerlerinden biri olduğunda kullanın.
Varsayılan | Yok |
Bulunma | RSA algoritmasıyla imzalanmış bir JWT'yi doğrulamak için Certificate, JWKS veya Value öğelerini kullanmanız gerekir. |
Tür | Dize |
Geçerli değerler | Bir akış değişkeni veya dize. |
<PublicKey/JWKS>
<!-- Specify the JWKS. --> <PublicKey> <JWKS>jwks-value-here</JWKS> </PublicKey> or: <!-- Specify a variable containing the JWKS. --> <PublicKey> <JWKS ref="public.jwks"/> </PublicKey> or: <!-- Specify a public URL that returns the JWKS. The URL is static, meaning you cannot set it using a variable. --> <PublicKey> <JWKS uri="jwks-url"/> </PublicKey>
Bir ortak anahtar grubu içeren JWKS biçiminde (RFC 7517) bir değer belirtir. Yalnızca algoritma RS256/RS384/RS512, PS256/PS384/PS512 veya ES256/ES384/ES512 değerlerinden biri olduğunda kullanın.
Gelen JWT, JWKS kümesinde bulunan bir anahtar kimliği taşırsa politika, JWT imzasını doğrulamak için doğru ortak anahtarı kullanır. Bu özellikle ilgili ayrıntılar için JWT'yi doğrulamak için JSON Web Anahtar Kümesi (JWKS) kullanma bölümüne bakın.
Değeri herkese açık bir URL'den getirirseniz Edge, JWKS'yi 300 saniye süreyle önbelleğe alır. Önbelleğin süresi dolduğunda Edge, JWKS'yi tekrar getirir.
Varsayılan | Yok |
Bulunma | JWT'yi RSA algoritması kullanarak doğrulamak için Certificate, JWKS veya Value öğesini kullanmanız gerekir. |
Tür | Dize |
Geçerli değerler | Bir akış değişkeni, dize değeri veya URL. |
<PublicKey/Value>
<PublicKey> <Value ref="public.publickeyorcert"/> </PublicKey> -or- <PublicKey> <Value> -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw2kPrRzcufvUNHvTH/WW Q0UrCw5c0+Y707KX3PpXkZGbtTT4nvU1jC0d1lHV8MfUyRXmpmnNxJHAC2F73IyN C5TBtXMORc+us7A2cTtC4gZV256bT4h3sIEMsDl0Joz9K9MPzVPFxa1i0RgNt06n Xn/Bs2UbbLlKP5Q1HPxewUDEh0gVMqz9wdIGwH1pPxKvd3NltYGfPsUQovlof3l2 ALvO7i5Yrm96kknfFEWf1EjmCCKvz2vjVbBb6mp1ZpYfc9MOTZVpQcXSbzb/BWUo ZmkDb/DRW5onclGzxQITBFP3S6JXd4LNESJcTp705ec1cQ9Wp2Kl+nKrKyv1E5Xx DQIDAQAB -----END PUBLIC KEY----- </Value> </PublicKey>
JWT üzerinde imzayı doğrulamak için kullanılan ortak anahtarı veya ortak sertifikayı belirtir. Anahtarı/sertifikayı bir akış değişkeninde geçirmek için ref özelliğini kullanın veya PEM kodlamalı anahtarı doğrudan belirtin. Yalnızca algoritma RS256/RS384/RS512, PS256/PS384/PS512 veya ES256/ES384/ES512 değerlerinden biri olduğunda kullanın.
Varsayılan | Yok |
Bulunma | RSA algoritmasıyla imzalanmış bir JWT'yi doğrulamak için Certificate, JWKS veya Value öğelerini kullanmanız gerekir. |
Tür | Dize |
Geçerli değerler | Bir akış değişkeni veya dize. |
<SecretKey/Value>
<SecretKey encoding="base16|hex|base64|base64url"> <Value ref="private.your-variable-name"/> </SecretKey>
Jetonları bir HMAC algoritmasıyla doğrulamak veya imzalamak için kullanılan gizli anahtarı sağlar. Yalnızca algoritma HS256, HS384, HS512 değerlerinden biri olduğunda kullanın..
Varsayılan | Yok |
Bulunma | HMAC algoritmaları için gereklidir. |
Tür | Dize |
Geçerli değerler |
Anahtarı bir akış değişkeninde iletmek için ref özelliğini kullanın. Not: Bir akış değişkeni ise "private" önekine sahip olmalıdır. Örneğin,
|
<Kaynak>
<Source>jwt-variable</Source>
Varsa politikanın doğrulamak için JWT'yi bulmayı beklediği akış değişkenini belirtir.
Varsayılan | request.header.authorization (Varsayılan değerle ilgili önemli bilgiler için yukarıdaki nota bakın). |
Bulunma | İsteğe bağlı |
Tür | Dize |
Geçerli değerler | Edge akışı değişken adı. |
<Subject>
<Subject>subject-string-here</Subject>
Bu politika, JWT'deki konunun politika yapılandırmasında belirtilen dizeyle eşleştiğini doğrular. Bu iddia, JWT'nin konusunu tanımlayan veya bununla ilgili bir beyanda bulunan iddialardır. Bu, RFC7519'da belirtilen standart iddia gruplarından biridir.
Varsayılan | Yok |
Bulunma | İsteğe bağlı |
Tür | Dize |
Geçerli değerler | Bir özneyi benzersiz şekilde tanımlayan herhangi bir değer. |
<TimeAllowance>
<TimeAllowance>120s</TimeAllowance>
Süre için "ek yayınlanma süresi"dir. Örneğin, süre 60 saniye olarak yapılandırılırsa süresi dolan bir JWT, süre sonu iddiasının ardından 60 saniye boyunca hâlâ geçerli olarak değerlendirilir. Öncesinde olmayan zaman da benzer şekilde değerlendirilir. Varsayılan olarak 0 saniyedir (ek yayınlanma süresi yoktur).
Varsayılan | 0 saniye (ek yayınlanma süresi yok) |
Bulunma | İsteğe bağlı |
Tür | Dize |
Geçerli değerler |
Değeri içeren bir akış değişkenine değer veya başvuru. Zaman aralıkları aşağıdaki gibi belirtilebilir:
|
Akış değişkenleri
Başarılı olduktan sonra, JWT'yi Doğrulama ve JWT'nin Kodunu Çöz politikaları bağlam değişkenlerini şu kalıba göre ayarlar:
jwt.{policy_name}.{variable_name}
Örneğin, politika adı jwt-parse-token
ise politika , JWT'de belirtilen konuyu jwt.jwt-parse-token.decoded.claim.sub
adlı bağlam değişkeninde saklar.
(Geriye dönük uyumluluk için jwt.jwt-parse-token.claim.subject
sürümünde de kullanıma sunulacaktır)
Değişken adı | Açıklama |
---|---|
claim.audience |
JWT kitlesi iddiası. Bu değer bir dize veya bir dize dizisi olabilir. |
claim.expiry |
Dönemden bu yana milisaniye cinsinden ifade edilen geçerlilik bitiş tarihi/saati. |
claim.issuedat |
Jetonun verildiği tarih. Dönemden bu yana geçen milisaniye cinsinden ifade edilir. |
claim.issuer |
JWT'yi veren kuruluş iddiası. |
claim.notbefore |
JWT, bir nbf talebi içeriyorsa bu değişken, epoch'tan itibaren milisaniye cinsinden ifade edilen değeri içerir. |
claim.subject |
JWT konusunun iddiası. |
claim.name |
Yükteki adlandırılmış hak talebinin (standart veya ek) değeri. Yükteki her hak talebi için bunlardan biri ayarlanır. |
decoded.claim.name |
Yükteki belirtilen hak talebinin (standart veya ek) JSON ile ayrıştırılabilir değeri. Yükteki her hak talebi için bir değişken ayarlanır. Örneğin, dönemden bu yana saniye cinsinden ifade edilen JWT zamanında verilen bilgiyi almak için decoded.claim.iat kullanabilirsiniz. claim.name akış değişkenlerini de kullanabilirsiniz ancak bir hak talebine erişmek için kullanılması önerilen değişken budur. |
decoded.header.name |
Yükteki bir başlığın JSON ile ayrıştırılabilir değeri. Yükteki her başlık için bir değişken ayarlanır. header.name akış değişkenlerini de kullanabilirsiniz ancak bir başlığa erişmek için önerilen değişken budur. |
expiry_formatted |
Kullanıcıların okuyabileceği bir dize olarak biçimlendirilmiş geçerlilik bitiş tarihi/saati. Örnek: 2017-09-28T21:30:45.000+0000 |
header.algorithm |
JWT'de kullanılan imzalama algoritması. Örneğin, RS256, HS384 vb. Daha fazla bilgi için (Algoritma) Başlık Parametresi konusuna bakın. |
header.kid |
JWT oluşturulurken eklenmişse Anahtar Kimliği. Ayrıca bir JWT'yi doğrulamak için JWT politikalarına genel bakış bölümündeki "Using a JSON Web Key Set (JWKS)" (JSON Web Anahtarı Kümesi Kullanma) bölümüne de göz atın. Daha fazla bilgi için (Anahtar Kimliği) Başlık Parametresi konusuna bakın. |
header.type |
JWT olarak ayarlanacak. |
header.name |
Adlandırılmış başlığın değeri (standart veya ek). JWT'nin başlık bölümündeki her ek başlık için bunlardan biri ayarlanır. |
header-json |
JSON biçiminde üstbilgi. |
is_expired |
doğru veya yanlış |
payload-claim-names |
JWT tarafından desteklenen bir dizi hak talebi. |
payload-json |
JSON biçimindeki yük.
|
seconds_remaining |
Jetonun süresinin dolmasına kalan saniye sayısı. Jetonun süresi dolmuşsa bu sayı negatif olur. |
time_remaining_formatted |
Jetonun sona ermesinden önce kalan ve okunabilir bir dize olarak biçimlendirilmiş süre. Örnek: 00:59:59.926 |
valid |
DoğrulamaJWT durumunda, imza doğrulandığında bu değişken "true" olur. Geçerli zaman, jetonun süresinin sona ermesinden önce ve varsa jetonun notBefore değerinden sonradır. Aksi takdirde yanlış değerini alır.
DecodeJWT durumunda bu değişken ayarlanmamıştır. |
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. Bu bilgiyi, 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.jwt.AlgorithmInTokenNotPresentInConfiguration |
401 | Doğrulama politikasında birden fazla algoritma olduğunda ortaya çıkar. |
steps.jwt.AlgorithmMismatch |
401 | Oluşturma politikasında belirtilen algoritma, Doğrulama politikasında beklenen algoritmayla eşleşmedi. Belirtilen algoritmalar eşleşmelidir. |
steps.jwt.FailedToDecode |
401 | Politika, JWT'nin kodu çözülemedi. JWT bozuk olabilir. |
steps.jwt.GenerationFailed |
401 | Politika, JWT'yi oluşturamadı. |
steps.jwt.InsufficientKeyLength |
401 | HS256 algoritmasında 32 bayttan, HS386 algoritmasında 48 bayttan ve HS512 algoritmasında 64 bayttan az olan bir anahtar. |
steps.jwt.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.jwt.InvalidCurve |
401 | Anahtar tarafından belirtilen eğri, Elips Biçimli Eğri algoritması için geçerli değildir. |
steps.jwt.InvalidJsonFormat |
401 | Başlıkta veya yükte geçersiz JSON bulundu. |
steps.jwt.InvalidToken |
401 | Bu hata, JWT imzası doğrulaması başarısız olduğunda ortaya çıkar. |
steps.jwt.JwtAudienceMismatch |
401 | Kitle hak talebi, jeton doğrulanamadı. |
steps.jwt.JwtIssuerMismatch |
401 | Kartı veren kuruluş talebi, jeton doğrulamasında başarısız oldu. |
steps.jwt.JwtSubjectMismatch |
401 | Konuyla ilgili hak talebi, jeton doğrulanamadı. |
steps.jwt.KeyIdMissing |
401 | Doğrulama politikası, ortak anahtarlar için kaynak olarak bir JWKS kullanır ancak imzalı JWT, başlıkta kid özelliği içermiyor. |
steps.jwt.KeyParsingFailed |
401 | Ortak anahtar, verilen anahtar bilgisinden ayrıştırılamadı. |
steps.jwt.NoAlgorithmFoundInHeader |
401 | JWT, herhangi bir algoritma başlığı içermiyorsa ortaya çıkar. |
steps.jwt.NoMatchingPublicKey |
401 | Doğrulama politikası, ortak anahtarlar için kaynak olarak JWKS kullanır ancak imzalı JWT'deki kid , JWKS'de listelenmiyor. |
steps.jwt.SigningFailed |
401 | GenerateJWT'de, HS384 veya HS512 algoritmaları için minimum boyuttan daha küçük bir anahtar için |
steps.jwt.TokenExpired |
401 | Politika, süresi dolmuş bir jetonu doğrulamaya çalışır. |
steps.jwt.TokenNotYetValid |
401 | Jeton henüz geçerli değil. |
steps.jwt.UnhandledCriticalHeader |
401 | crit başlığında JWT'yi Doğrula politikası tarafından bulunan üst bilgi, KnownHeaders bölgesinde listelenmiyor. |
steps.jwt.UnknownException |
401 | Bilinmeyen bir istisna oluştu. |
steps.jwt.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ı | Neden | Düzelt |
---|---|---|
InvalidNameForAdditionalClaim |
<AdditionalClaims> öğesinin <Claim> alt öğesinde kullanılan hak talebi şu kayıtlı adlardan biriyse dağıtım başarısız olur: kid , iss , sub , aud , iat , exp , nbf veya jti .
|
build |
InvalidTypeForAdditionalClaim |
<AdditionalClaims> öğesinin <Claim> alt öğesinde kullanılan hak talebi string , number , boolean veya map türünde değilse dağıtım başarısız olur.
|
build |
MissingNameForAdditionalClaim |
İddianın adı <AdditionalClaims> öğesinin <Claim> alt öğesinde belirtilmezse dağıtım başarısız olur.
|
build |
InvalidNameForAdditionalHeader |
Bu hata, <AdditionalClaims> öğesinin <Claim> alt öğesinde kullanılan iddianın adı alg veya typ olduğunda ortaya çıkar.
|
build |
InvalidTypeForAdditionalHeader |
<AdditionalClaims> öğesinin <Claim> alt öğesinde kullanılan hak talebi türü string , number , boolean veya map türünde değilse dağıtım başarısız olur.
|
build |
InvalidValueOfArrayAttribute |
Bu hata, <AdditionalClaims> öğesinin <Claim> alt öğesindeki dizi özelliğinin değeri true veya false olarak ayarlanmadığında ortaya çıkar.
|
build |
InvalidValueForElement |
<Algorithm> öğesinde belirtilen değer desteklenen bir değer değilse dağıtım başarısız olur.
|
build |
MissingConfigurationElement |
<PrivateKey> öğesi, RSA ailesi algoritmaları veya <SecretKey> öğesi HS Family algoritmaları ile kullanılmazsa bu hata oluşur.
|
build |
InvalidKeyConfiguration |
<Value> alt öğesi <PrivateKey> veya <SecretKey> öğelerinde tanımlanmazsa dağıtım başarısız olur.
|
build |
EmptyElementForKeyConfiguration |
<PrivateKey> veya <SecretKey> öğelerinin <Value> alt öğesinin ref özelliği boşsa ya da belirtilmemişse dağıtım başarısız olur.
|
build |
InvalidConfigurationForVerify |
Bu hata, <Id> öğesi <SecretKey> öğesi içinde tanımlanırsa ortaya çıkar.
|
build |
InvalidEmptyElement |
Bu hata, JWT'yi Doğrula politikasının <Source> öğesi boşsa ortaya çıkar. Varsa Edge akışı değişken adıyla tanımlanmalıdır.
|
build |
InvalidPublicKeyValue |
<PublicKey> öğesinin <JWKS> alt öğesinde kullanılan değer, RFC 7517'de belirtildiği gibi geçerli bir biçimi kullanmıyorsa dağıtım başarısız olur.
|
build |
InvalidConfigurationForActionAndAlgorithm |
<PrivateKey> öğesi HS Family algoritmalarıyla veya <SecretKey> öğesi RSA Family algoritmalarıyla kullanılıyorsa dağıtım başarısız olur.
|
build |
Hata değişkenleri
Bu değişkenler, bir çalışma zamanı hatası oluştuğunda ayarlanır. Daha fazla bilgi için Politika hataları hakkında bilmeniz gerekenler bölümüne bakın.
Değişkenler | Konum | Örnek |
---|---|---|
fault.name="fault_name" |
fault_name, yukarıdaki Çalışma zamanı hataları tablosunda listelenen hatanın adıdır. Hata adı, hata kodunun son kısmıdır. | fault.name Matches "TokenExpired" |
JWT.failed |
Tüm JWT politikaları, hata durumunda aynı değişkeni ayarlar. | JWT.failed = true |
Örnek hata yanıtı
Hata işleme için en iyi uygulama, hata yanıtının errorcode
bölümünü yakalamaktır. Değişebileceği için faultstring
içindeki metne güvenmeyin.
Hata kuralı örneği
<FaultRules> <FaultRule name="JWT Policy Errors"> <Step> <Name>JavaScript-1</Name> <Condition>(fault.name Matches "TokenExpired")</Condition> </Step> <Condition>JWT.failed=true</Condition> </FaultRule> </FaultRules>