JWC politikasını çözün

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

Ne

JWT üzerindeki imzayı doğrulamadan bir JWT'nin kodunu çözer. Bu, en çok VerifyJWT politikasıyla uyumlu olarak kullanıldığında, yani JWT'nin imzası doğrulanmadan önce JWT içindeki bir hak talebinin değerinin bilinmesi gerektiğinde yararlıdır.

JWT Kod Çözme politikası, JWT'yi imzalamak için kullanılan algoritmadan bağımsız olarak çalışır. Ayrıntılı tanıtım için JWS ve JWT politikalarına genel bakış başlıklı makaleyi inceleyin.

Video

JWT'nin kodunu nasıl çözeceğinizi öğrenmek için kısa bir video izleyin.

Örnek: JWT'nin kodunu çözme

Aşağıda gösterilen politika, var.jwt akış değişkeninde bulunan bir JWT'nin kodunu çözer. Bu değişken mevcut olmalı ve uygun (çözünür) bir JWT içermelidir. Politika, JWT'yi herhangi bir akış değişkeninden alabilir.

<DecodeJWT name="JWT-Decode-HS256">
    <DisplayName>JWT Verify HS256</DisplayName>
    <Source>var.jwt</Source>
</DecodeJWT>

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.

JWT Kodu Çözme için öğe referansı

Politika referansı, Kod Çözme JWT politikasının öğelerini ve özelliklerini açıklar.

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

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

<Kaynak>

<Source>jwt-variable</Source>

Varsa politikanın kodu çözmek 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ı

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 Neden Düzelt
steps.jwt.FailedToDecode 401 Politika, JWT'nin kodunu çözemediğinde ortaya çıkar. JWT bozuk, geçersiz veya başka bir şekilde kodu çözülemeyebilir.
steps.jwt.FailedToResolveVariable 401 Politikanın <Source> öğesinde belirtilen akış değişkeni mevcut olmadığında ortaya çıkar.
steps.jwt.InvalidToken 401 Politikanın <Source> öğesinde belirtilen akış değişkeni kapsam dışında olduğunda veya çözümlenemediğinde ortaya çıkar.

Dağıtım hataları

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

Hata adı Neden Düzelt
InvalidEmptyElement Kodu çözülecek JWT'yi içeren akış değişkeni politikanın <Source> öğesinde belirtilmediğinde ortaya çıkar.

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>