JWT politikasını doğrulayın

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 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 <displayname></displayname> öğesini kullanın.

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 true değerine ayarlayın.

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

Politikayı "devre dışı bırakmak" için false olarak ayarlayın. Politika bir akışa bağlı kalsa bile uygulanmaz.

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

encoding için geçerli değerler hex, base16, base64 veya base64url şeklindedir. hex ve base16 kodlama değerleri eş anlamlıdır.

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, private.mysecret

<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:
  • s = saniye
  • e = dakika
  • y = saat
  • d = gün

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.
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.
MissingNameForAdditionalClaim İddianın adı <AdditionalClaims> öğesinin <Claim> alt öğesinde belirtilmezse dağıtım başarısız olur.
InvalidNameForAdditionalHeader Bu hata, <AdditionalClaims> öğesinin <Claim> alt öğesinde kullanılan iddianın adı alg veya typ olduğunda ortaya çıkar.
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.
InvalidValueOfArrayAttribute Bu hata, <AdditionalClaims> öğesinin <Claim> alt öğesindeki dizi özelliğinin değeri true veya false olarak ayarlanmadığında ortaya çıkar.
InvalidValueForElement <Algorithm> öğesinde belirtilen değer desteklenen bir değer değilse dağıtım başarısız olur.
MissingConfigurationElement <PrivateKey> öğesi, RSA ailesi algoritmaları veya <SecretKey> öğesi HS Family algoritmaları ile kullanılmazsa bu hata oluşur.
InvalidKeyConfiguration <Value> alt öğesi <PrivateKey> veya <SecretKey> öğelerinde tanımlanmazsa dağıtım başarısız olur.
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.
InvalidConfigurationForVerify Bu hata, <Id> öğesi <SecretKey> öğesi içinde tanımlanırsa ortaya çıkar.
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.
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.
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.

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ı

JWT Politikası Hata Kodları

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>