Apigee Edge belgelerini görüntülüyorsunuz.
.
Git:
Apigee X belgeleri. bilgi
Bu konuda, JWT (JSON Web Jetonu) hakkında genel bilgi verilmektedir ve Apigee proxy geliştiricilerinin ilgisini çekebilecek JWS (JSON Web İmzası) ve Apigee JWS/JWT politikaları gibi politikalar hakkında bilgi sahibi olmanızı sağlar.
Giriş
Hem JWS hem JWT, bağlı kuruluşlar arasındaki iddiaları veya iddiaları paylaşmak için yaygın olarak kullanılır. izin verir. JWS/JWT politikaları, Edge API proxy'lerinin şunları yapmasına olanak tanır:
- İmzalı bir JWT oluşturun veya JWS.
- İmzalanmış bir JWT'yi doğrulama ya da JWS ve JWS/JWT kapsamındaki hak talepleri.
- İmzalı bir JWT'nin kodunu çözme veya JWS'yi kullanabilirsiniz.
Son iki durumda politika, ek politikalara izin veren değişkenleri de ayarlar. doğrulanmış iddiaları incelemek ve bunlara dayanarak kararlar vermek için arka uç hizmetlerini kendileri kullanabilir hak talebi.
Doğrulama JWS/JWT politikasını kullanırken, geçersiz JWS/JWT içerikleri reddedilir ve hataya neden olur. koşul. Benzer şekilde, JWS/JWT Kodunu Çözme politikası kullanılırken hatalı biçimlendirilmiş bir JWS/JWT hataya neden olur koşul.
Videolar
JWT ile ilgili kısa bir tanıtım için kısa bir video izleyin. Bu video, JWT oluşturmaya özgü kavramların birçoğu JWS'de aynıdır.
JWT yapısı hakkında daha fazla bilgi edinebileceğiniz kısa bir video.
Kullanım alanları
JWS/JWT politikalarını kullanarak şunları yapabilirsiniz:
- Bir Edge proxy'sinin proxy veya hedef uç nokta tarafında yeni bir JWS/JWT oluşturun. Örneğin, Örneğin, JWS/JWT oluşturan ve bunu istemciye döndüren bir proxy istek akışı oluşturabilirsiniz. Alternatif olarak, hedef istek akışında JWS/JWT oluşturacak şekilde bir proxy tasarlayabilir ve bunu, hedefe gönderilen isteğe ekler. Bu hak talepleri, ilgili oturum açma işleminden sonra arka uç hizmetlerini kullanabilirsiniz.
- Hedeften gelen istemci isteklerinden alınan JWS/JWT hak taleplerini doğrulayın ve ayıklayın hizmet yanıtları, Hizmet Çağrısı politikası yanıtlarından veya diğer kaynaklardan. Edge, JWS/JWT'nin üçüncü tarafça mı yoksa Edge tarafından mı oluşturulduğuna bakılmaksızın JWS/JWT'deki imzayı doğrulayın. (RSA veya HMAC algoritmaları kullanılarak) çalıştırılabilir.
- JWS/JWT kodunu çözün. Kod çözme, en çok "JWS/JWT Doğrulama" politikasıyla birlikte kullanıldığında aşağıdaki durumlarda faydalıdır: JWS/JWT içindeki bir hak talebinin (JWT) veya başlığın (JWS/JWT) değeri doğrulamadan önce bilinmelidir JWS/JWT.
JWS/JWT'nin bölümleri
İmzalı bir JWS/JWT, bilgileri noktalarla ayrılmış üç bölümde kodlar: başlık, yük ve imza:
header.payload.signature
- JWS/JWT oluştur politikası üç bölümü de oluşturur.
- "JWS/JWT'yi Doğrula" politikası üç bölümü de inceler.
- JWS/JWT Kodunu Çözme politikası yalnızca başlık ve yükü inceler.
JWS, yükü JWS'den çıkaran ayrılmış biçimi de destekler:
header..signature
Ayrı bir JWS ile yük JWS'den ayrı olarak gönderilir. Önce
Ham, kodlanmamış JWS yükünü belirtmek için Doğrulama JWS politikasının <DetachedContent>
öğesi.
Doğrulama JWS politikası daha sonra JWS'yi, JWS'deki başlık ve imzayı kullanarak ve
<DetachedContent>
öğesi tarafından belirtilir.
Jetonlar ve bunların nasıl kodlanıp imzalandığı hakkında daha fazla bilgi edinmek için aşağıdaki konulara bakın:
- JWT: IETF RFC7519
- JWS: IETF RFC7515
JWS ile JWT arasındaki farklar
Bağlı uygulamalar arasında hak taleplerini veya iddiaları paylaşmak için JWT ya da JWS kullanabilirsiniz. İkisi arasındaki en önemli fark yükün gösterimidir:
- JWT
- Yük her zaman bir JSON nesnesidir
- Yük her zaman JWT'ye bağlıdır
- Jetonun
typ
başlığı her zamanJWT
olarak ayarlanır
- JWS
- Yük; JSON nesnesi, bayt akışı, sekizlik akış gibi herhangi bir biçimle temsil edilebilir.
- Yükün JWS'ye bağlanması gerekmez.
JWT biçimi yükü temsil etmek için her zaman bir JSON nesnesi kullandığından Uç Oluşturma JWT ve JWT politikalarının, aud gibi yaygın Kayıtlı Hak Talebi Adlarını işlemek için yerleşik desteğe sahip olduğunu doğrulama iss, sub ve diğerleri. Bu, şablonun içerdiği öğeleri Bu hak taleplerini yükte ayarlamak için JWT politikası, değerlerini doğrulamak için de JWT'yi doğrula politikası öğelerini oluşturun. Kayıtlı Hak Talebi Adlarını inceleyin bölümüne bakın.
Belirli Kayıtlı Hak Talebi Adlarını desteklemenin yanı sıra, "JWT Oluştur" politikası doğrudan JWT'ye rastgele adlara sahip hak taleplerinin eklenmesini destekler. Her talep, basit bir ad/değer çiftidir ve değer; sayı, boole, dize, harita veya dizi türünde olabilir.
Bir JWS yük için herhangi bir veri gösterimini kullanabileceğinden yüke hak talebi ekleyemezsiniz. JWS Oluştur politikası, JWS'nin başlığına rastgele adlara sahip hak taleplerinin eklenmesini destekler. Ayrıca JWS politikaları, JWS'nin yükü atladığı ayrılmış bir yükü destekler. Ayrık yük, JWS'yi ve yükü ayrı ayrı göndermenize olanak tanır ve çeşitli güvenlik standartları tarafından gereklidir.
İmza algoritmaları hakkında
JWS/JWT Doğrulaması ve JWS/JWT Oluşturma politikaları; SHA2 kullanan RSA, RSASSA-PSS, ECDSA ve HMAC algoritmalarını destekler. sağlama toplamı 256, 384 veya 512'dir. JWS/JWT Kod Çözme politikası, algoritmasının yerini alır.
HMAC algoritması
HMAC algoritması, gizli anahtar (gizli anahtar) olarak bilinen, paylaşılan bir gizli anahtarı kullanarak (JWS/JWT imzalama olarak da bilinir) ve imzayı doğrulamak için kullanılır.
Gizli anahtarın minimum uzunluğu algoritmanın bit gücüne bağlıdır:
- HS256: Minimum 32 bayt anahtar uzunluğu
- HS386: Minimum anahtar uzunluğu 48 bayt
- HS512: Minimum anahtar uzunluğu 64 bayt
RSA algoritması
RSA algoritması, kriptografik imza için ortak/özel anahtar çifti kullanır. RSA ile imzalayan taraf JWS/JWT'yi imzalamak için RSA özel anahtarı, doğrulayan taraf ise JWS/JWT'de imzayı doğrulamak için eşleşen RSA ortak anahtarını kullanın. tuşlarını kullanın.
RSASSA-PSS algoritması
RSASSA-PSS algoritması, RSA algoritmasında yapılan bir güncellemedir. RSS gibi RSASSA-PSS de bir RSA kullanır. şifreleme imzası için ortak/özel anahtar çiftinin değeridir. Anahtarın biçimi RSS ile aynıdır. İmzalayan taraf JWS/JWT'yi imzalamak için özel anahtar, doğrulayan taraf ise eşleşen ortak anahtarı kullanın. Anahtarlarda herhangi bir boyut gereksinimi yoktur.
ECDSA algoritması
Eliptik Eğri Dijital İmza Algoritması (ECDSA) algoritması, elips biçimli bir eğri şifreleme yöntemidir. algoritmasını kullanır. ECDSA algoritmaları kullandığınızda algoritma, her bir işleme belirtmeniz gereken ortak ve özel anahtarın türü:
Algoritma | Eğri | Temel koşul |
---|---|---|
ES256 | P-256 | P-256 eğrisinden oluşturulmuş bir anahtar (secp256r1 veya prime256v1 olarak da bilinir) |
ES384 | P-384 | P-384 eğrisinden oluşturulmuş bir anahtar (secp384r1 olarak da bilinir) |
ES512 | P-521 | P-521 eğrisinden oluşturulan bir anahtar (secp521r1 olarak da bilinir) |
Anahtar şifreleme algoritmaları
JWS/JWT politikaları, OpenSSL'yi tıklayın.
JWS/JWT'yi doğrulamak için JSON Web Anahtarı Seti (JWKS) kullanma
İmzalanmış bir JWS/JWT'yi doğrularken şu adresteki ortak anahtarı sağlamanız gerekir: jetonu imzalamak için kullanılan özel anahtarla ilişkilendirilmiş olmalıdır. Şu URL için iki seçeneğiniz vardır: JWS/JWT politikalarını doğrulamak için ortak anahtarı sağlayın:
- gerçek ortak anahtar değerini kullanın (genellikle bir akış değişkeninde sağlanır) veya
- JWKS'ye sarmalanmış bir ortak anahtar kullanın.
JWKS hakkında
JWKS, bir JSON Web Anahtarı (JWK) kümesini temsil eden bir JSON yapısıdır. JWK, bir JSON verisidir şifreleme anahtarını temsil eden yapıya sahip olmalıdır. JWK ve JWKS, RFC7517'de açıklanmaktadır. JKWS örneklerini şu adreste bulabilirsiniz: Ek A. Örnek JSON Web Anahtarı Kümeleri
JWKS yapısı
RFC7517, JWKS temel öğelerini açıklar her anahtar türü için (ör. "RSA") veya "EC" ile belirtin. Örneğin, anahtar türüne bağlı olarak Bu parametreler şunları içerebilir:
- kty: Anahtar türü (ör. "RSA") veya "EC" ile belirtin.
- kid (anahtar kimliği): İsteğe bağlı herhangi bir değer olabilir (anahtar içinde yinelenen öğeler olamaz) ayarlanır). Gelen JWT, JWKS grubunda bulunan bir anahtar kimliği içeriyorsa politika JWS/JWT imzasını doğrulamak için doğru ortak anahtarı kullanır.
Aşağıda, isteğe bağlı öğelere ve bunların değerlerine ilişkin örnekler verilmiştir:
- alg - Anahtar algoritması. JWS/JWT'deki imzalama algoritmasıyla eşleşmelidir.
- use (kullan) - Varsa sig şeklinde olmalıdır.
Aşağıdaki JWKS, gerekli öğeleri ve değerleri içermektedir ve Edge'de ( https://www.googleapis.com/oauth2/v3/certs):
{ "keys":[ { "kty":"RSA", "alg":"RS256", "use":"sig", "kid":"ca04df587b5a7cead80abee9ea8dcf7586a78e01", "n":"iXn-WmrwLLBa-QDiToBozpu4Y4ThKdwORWFXQa9I75pKOvPUjUjE2Bk05TUSt7-V7KDjCq0_Nkd-X9rMRV5LKgCa0_F8YgI30QS3bUm9orFryrdOc65PUIVFVxIwMZuGDY1hj6HEJVWIr0CZdcgNIll06BasclckkUK4O-Eh7MaQrqb646ghFlG3zlgk9b2duHbDOq3s39ICPinRQWC6NqTYfqg7E8GN_NLY9srUCc_MswuUfMJ2cKT6edrhLuIwIj_74YGkpOwilr2VswKsvJ7dcoiJxheKYvKDKtZFkbKrWETTJSGX2Xeh0DFB0lqbKLVvqkM2lFU2Qx1OgtTnrw", "e":"AQAB" }, { "kty":"EC", "alg":"ES256", "use":"enc", "kid":"k05TUSt7-V7KDjCq0_N" "crv":"P-256", "x":"Xej56MungXuFZwmk_xccvsMpCtXmqhvEEMCmHyAmKF0", "y":"Bozpu4Y4ThKdwORWFXQa9I75pKOvPUjUjE2Bk05TUSt", } ] }
Proxy'nizi JWKS kullanma
JWS/JWT, kartı veren kuruluştan alındığında, genellikle kartı veren kuruluş JWS/JWT'ye bir Anahtar Kimliği (veya alt kuruluş) ekler. kullanabilirsiniz. Anahtar, JWS/JWT alıcısının bunu yapmak için gerekli ortak veya gizli anahtarı nasıl bulacağını bildirir imzalanan JWS/JWT'deki imzayı doğrulayın.
Örneğin, bir yayıncının bir JWT'yi özel anahtarla imzaladığını varsayalım. "Anahtar Kimliği" bir modelin eşleşen ortak anahtarı içermelidir. Ortak anahtarların listesi genellikle şu adreste bulunur: iyi bilinen bir uç nokta, örneğin: https://www.googleapis.com/oauth2/v3/certs.
Bu, Edge'in (veya JWKS ile çalışan herhangi bir platformun) gerçekleştirmesi gereken temel dizidir JWKS'ye sahip bir JWS/JWT ile çalışmak için:
- Anahtar Kimliğini (çocuk) bulmak için JWS/JWT başlığını inceleyin.
- RS256 gibi imzalama algoritmasını (alg) bulmak için JWS/JWT başlığını inceleyin.
- Belirli bir veren için iyi bilinen uç noktanın JWKS'sinden anahtar ve kimlik listesini alın.
- JWS/JWT başlığında belirtilen anahtar kimliğini kullanarak anahtar listesinden ortak anahtarı çıkarın. JWKS anahtarı algoritmayı belirtiyorsa eşleştirme algoritmasıyla birlikte kullanır.
- JWS/JWT'de imzayı doğrulamak için bu ortak anahtarı kullanın.
Edge API proxy geliştiricisi olarak JWS/JWT doğrulaması yapmak için aşağıdakileri yapmanız gerekir:
- Belirli bir veren kurumun iyi bilinen uç noktasından anahtar ve kimliklerin listesini alın. Şunları yapabilirsiniz: bu adım için bir Hizmet Açıklama Metni Politikası kullanın.
- Doğrulama JWS/JWT politikasında, JWS/JWT'nin konumunu
<Source>
bölümünde belirtin. öğesini ve<PublicKey/JWKS>
öğesindeki JWKS yükünü destekler. Örneğin, VerifyJWT politikası için:<VerifyJWT name="JWT-Verify-RS256"> <Algorithm>RS256</Algorithm> <Source>json.jwt</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <PublicKey> <JWKS ref="public.jwks"/> </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>
.
JWT'yi Doğrulama politikası diğer tüm işlemleri yapar:
- JWT'de iddia edilen Anahtar Kimliği (kid) ile eşleşen Anahtar Kimliğine sahip bir anahtar sonra JWT'yi doğruladığınızda, JWT'yi doğrula politikası hata bildirir ve JWT'yi doğrulamaz.
- Gelen JWT üstbilgisinde bir anahtar kimliği (kid) yoksa bu keyid-to-verification-key'i kullanamazsınız.
Proxy tasarımcısı olarak kullanılacak anahtarı belirlemekten siz sorumlusunuz; bazı durumlarda bu sabit, sabit kodlu bir anahtar olabilir.