Function Compute içinde bir HTTP tetikleyicisi için JSON Web Token (JWT) kimlik doğrulamasını yapılandırabilirsiniz. Bu yapılandırma, işlevinize yalnızca geçerli bir JWT'ye sahip istemcilerin erişmesini sağlayarak HTTP hizmetinizin güvenliğini artırır ve yetkisiz erişim ile kötü amaçlı saldırıları önlemeye yardımcı olur.
Arka plan bilgileri
Genel bakış
Function Compute, bir HTTP tetikleyicisi için JWT kimlik doğrulamasını etkinleştirmenize olanak tanır. RFC 7519 standardında tanımlanan JWT, istekleri kimlik doğrulamak için belirteç tabanlı bir yöntemdir. Kullanıcı durumu bilgileri, istemci tarafından sağlanan bir token içinde saklanır; bu da işlevin (sunucunun) bu bilgiyi depolamasına gerek kalmadığı anlamına gelir. Bu durum, JWT'yi sunucusuz mimarilere uygun bir kimlik doğrulama yöntemi haline getirir. Function Compute, bir HTTP tetikleyicisi için yapılandırdığınız genel JSON Web Key Set (JWKS) kullanarak HTTP isteklerinde JWT kimlik doğrulaması gerçekleştirir. Tetikleyicinin yapılandırmasına bağlı olarak Function Compute, claims değerlerini parametre olarak işleve iletebilir. Bu sayede işleviniz, istekleri kimlik doğrulamak yerine iş mantığına odaklanabilir. JWT token kimlik doğrulama süreci ve temelleri hakkında daha fazla bilgi edinmek için JWT tabanlı belirteç kimlik doğrulaması ve JWT'ye Giriş konularına bakın.
JWT kimlik doğrulamasının çalışma şekli
Önceki şekilde, asimetrik şifreleme algoritması kullanan bir Function Compute HTTP tetikleyicisindeki JWT kimlik doğrulama iş akışının sırası gösterilmektedir. Adımlar şu şekildedir:
İstemci, özel bir yetkilendirme hizmetine bir kimlik doğrulama isteği gönderir. Bu istek genellikle son kullanıcının kullanıcı adı ve parolasını içerir.
Özel yetkilendirme hizmeti, kullanıcı adı ve parola gibi istekteki kimlik bilgilerini doğrular. Doğrulama başarılı olduktan sonra özel bir anahtar kullanarak standart bir belirteç oluşturur.
Özel yetkilendirme hizmeti, belirteci içeren bir yanıtı istemciye geri gönderir. İstemcinin bu
tokendeğerini yerel olarak önbelleğe alması gerekir.İstemci, belirteci içeren bir iş isteğini HTTP tetikleyicisine gönderir.
HTTP tetikleyicisi, yapılandırılmış genel anahtarı kullanarak istekteki belirteci doğrular.
Belirteç doğrulandıktan sonra tetikleyici, isteği korunan işleve iletir.
Korunan işlev, iş isteğini işler ve bir yanıt döndürür.
HTTP tetikleyicisi, iş yanıtını istemciye iletir.
Önkoşullar
Bir işlev ve bir HTTP tetikleyicisi oluşturun. Daha fazla bilgi için bkz. İşlev oluşturma ve Tetikleyici oluşturma.
Sınırlamalar
JWT'leri oluşturmak ve dağıtmak için herhangi bir yöntemi kullanabilirsiniz. Function Compute, tetikleyici için yapılandırılan genel JWKS kullanarak JWT'leri kimlik doğrular.
Function Compute,
kid(anahtar kimliği) içermeyen bir JSON Web Key (JWK) destekler.Tetikleyici, bir belirteci istek
headeralanından, birQueryparametresinden (GET istekleri için), bir form parametresinden (POST istekleri için) veya bircookiedeğerinden okuyabilir.claimsdeğerlerini işleve birheaderalanı, bir form parametresi (POST istekleri için) veya bircookiedeğeri olarak iletebilirsiniz.-
Function Compute, bir HTTP tetikleyicisi için bir JWKS yapılandırmanıza olanak tanır. Sistem, JWKS içinde
tokeniçindekikiddeğeriyle eşleşen bir genel JWK arar. Ardından bu genel anahtarı kullanaraktokenimzasını doğrular. Bir tetikleyici için kullanılan JWKS'te,kiddeğeri eksik olan veya boş dize olan en fazla bir JWK bulunabilir.Function Compute JWT aşağıdaki algoritmaları destekler.
İmza algoritması
Alg değeri
RSASSA-PKCS1-V1_5
RS256, RS384, RS512
RSASSA-PSS
PS256, PS384, PS512
Eliptik Eğri (ECDSA)
ES256, ES384, ES512
HMAC
HS256, HS384, HS512
EdDSA
EdDSAÖnemliHMAC imza algoritması simetrik şifreleme kullanır ve daha az güvenlidir. Daha güvenli bir asimetrik şifreleme algoritması kullanmanızı öneririz.
Asimetrik şifreleme algoritması kullanırken, güvenlik amacıyla JWT'niz yalnızca genel anahtar bilgilerini içermelidir. Özel anahtar bilgilerini dahil etmemenizi öneririz.
Belirteç sızıntısını önlemek için isteklerdeki
tokengibi hassas bilgileri korumak üzere HTTPS kullanmanızı öneririz.
Yordam
1. Adım: JWT kimlik doğrulamasını yapılandırın
Function Compute konsolu üzerinde oturum açın. Sol gezinme bölmesinde seçeneğini tıklayın.
Üst gezinme çubuğunda bir bölge seçin. Functions sayfasında hedef işlevi tıklayın.
İşlev ayrıntıları sayfasında Trigger sekmesini tıklayın. HTTP tetikleyicisini bulun ve Actions sütunundaki Modify seçeneğini tıklayın.
-
Tetikleyiciyi Düzenle panelinde aşağıdaki parametreleri yapılandırın ve ardından OK öğesini tıklayın.
Authentication Method için JWT Authentication seçeneğini seçin.
-
JWKS değerini yapılandırın.
Bir HTTP tetikleyicisi için JWT kimlik doğrulamasını yapılandırmak için geçerli bir JWKS sağlamalısınız. Kendi JWKS'nizi oluşturabilir veya JSON Web Key Generator gibi çevrimiçi araçları arayarak mkjwk.org gibi bir araç kullanabilirsiniz. PEM formatında bir anahtarınız varsa, bunu JWKS formatına dönüştürmek için jwx gibi bir araç kullanabilirsiniz.
Bu konuda örnek olarak mkjwk.org kullanılarak bir JWKS oluşturulması ele alınmaktadır. Aşağıdaki şekilde gösterildiği gibi Key Use değerini Signature, Algorithm değerini RS256 ve Show X.509 değerini Yes olarak ayarlayın ve ardından Generate öğesini tıklayın. JWT belirtecini vermek için kodunuzda Özel Anahtarı (şekildeki ①) kullanmanız gerektiğinden bunu güvenli bir şekilde saklayın. Genel Anahtarın (şekildeki ②) içeriğini kopyalayıp konsoldaki JWKS yapılandırmasının keys dizisine yapıştırabilirsiniz.


Aşağıdaki kod bir JWKS yapılandırma örneği sunar.
{ "keys": [ { "alg": "RS256", "e": "AQAB", "kty": "RSA", "n": "u1LWgoomekdOMfB1lEe96OHehd4XRNCbZRm96RqwOYTTc28Sc_U5wKV2umDzolfoI682ct2BNnRRahYgZPhbOCzHYM6i8sRXjz9Ghx3QHw9zrYACtArwQxrTFiejbfzDPGdPrMQg7T8wjtLtkSyDmCzeXpbIdwmxuLyt_ahLfHelr94kEksMDa42V4Fi5bMW4cCLjlEKzBEHGmFdT8UbLPCvpgsM84JK63e5ifdeI9NdadbC8ZMiR--dFCujT7AgRRyMzxgdn2l-nZJ2ZaYzbLUtAW5_U2kfRVkDNa8d1g__2V5zjU6nfLJ1S2MoXMgRgDPeHpEehZVu2kNaSFvDUQ", "use": "sig" } ] } -
JWT Token Configuration bölümünde
Tokenkonumunu veTokenadını belirtin.Tokenkonumu Header, Cookie, sorgu parametreleri (GET) ve form parametrelerini (POST) destekler.Tokenkonumu Header olarak ayarlandığında Parameter Name ve Remove Prefix değerlerini de belirtmeniz gerekir. Function Compute, belirteci elde ederken Remove Prefix içinde belirtilen ön eki kaldırır.
-
JWT Claim Conversion bölümünde işlev için parametre aktarım konumunu, orijinal parametre adını ve yeni parametre adını belirtin.
Claim'leri bir Header, Cookie veya Form parametresine (POST) eşleyebilirsiniz.

-
İstek eşleştirme modunu ayarlayın.
Match All: Tüm HTTP istekleri JWT kimlik doğrulaması gerektirir.
Whitelist Mode: Whitelist of Request Paths içinde belirtilen yollar için yapılan HTTP istekleri JWT kimlik doğrulaması gerektirmez. Diğer tüm istekler JWT kimlik doğrulaması gerektirir.
Blacklist Mode: Blacklist of Request Paths içinde belirtilen yollar için yapılan HTTP istekleri JWT kimlik doğrulaması gerektirir. Diğer tüm istekler JWT kimlik doğrulaması gerektirmez.
Whitelist Mode ve Blacklist Mode aşağıdaki iki eşleştirme türünü destekler:
-
Tam eşleşme
Bir istek yolu, yalnızca yapılandırılan yolla tamamen aynı olduğunda eşleşir. Örneğin, Blacklist of Request Paths değerini /a olarak ayarlarsanız /a yoluna yapılan istekler JWT kimlik doğrulaması gerektirir ancak /a/ yoluna yapılan istekler gerektirmez.
-
Karma eşleşme
Bir yolda joker karakter () kullanabilirsiniz ancak joker karakter () yolun sonunda olmalıdır. Örneğin, Blacklist of Request Paths değerini /login/* olarak ayarlarsanız /login/ ön ekine sahip /login/a ve /login/b/c/d gibi tüm yollara yapılan istekler JWT kimlik doğrulaması gerektirir.
2. Adım: Yapılandırmayı doğrulayın
Postman gibi bir test aracı kullanarak bir uç nokta, belirteç ve diğer bilgileri sağlayarak HTTP tetikleyicisinin JWT yapılandırmasına göre HTTP hizmetine beklenen şekilde erişebildiğinizi doğrulayın.
-
Adımda oluşturduğunuz X.509 PEM formatındaki özel anahtarı kullanarak bir JWT belirteci verin. Aşağıdaki adımlar, yerel bir Python betiği kullanarak nasıl belirteç oluşturulacağını göstermektedir.
-
PyJWT modülünü yükleyin.
pip install 'PyJWT>=2.0' -
Bir JWT belirteci oluşturmak için aşağıdaki örnek Python betiğini yerel olarak çalıştırın.
import jwt import time private_key = """ -----BEGIN PRIVATE KEY----- <The X.509 PEM-format private key generated in Step 1> -----END PRIVATE KEY----- """ headers = { "alg": "RS256", "typ": "JWT" } payload = { "sub": "1234567890", "name": "John Snow", "iat": int(time.time()), # The time when the token was issued. "exp": int(time.time()) + 60 * 60, # Set the token to be valid for 1 hour. } encoded = jwt.encode(payload=payload, key=private_key.encode(), headers=headers) print("Generated token: %s" % encoded)
-
-
HTTP hizmetine erişilebildiğini doğrulamak için Postman'i kullanın.
İşlev ayrıntıları sayfasının Trigger sekmesinde HTTP tetikleyicisinin genel uç noktasını alın ve Postman'deki URL alanına girin.
-
Postman'de başlıklardaki belirteç parametresini yapılandırın ve Send öğesini tıklayın. Aşağıdaki tabloda belirteç yapılandırmasına ilişkin bir örnek verilmiştir.
Parametre
Değer
Açıklama
AnahtarAuthentication
JWT Token Configuration bölümünde belirttiğiniz parametre adı.
DeğerBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9uIFNub3ciLCJhZG1pbiI6dHJ1ZSwiZXhwIjo0ODI5NTk3NjQxfQ.eRcobbpjAd3OSMxcWbmbicOTLjO2vuLR9F2QZMK4rz1JqfSRHgwQVqNxcfOIO9ckDMNlF_3jtdfCfvXfka-phJZpHmnaQJxmnOA8zA3R4wF4GUQdz5zkt74cK9jLAXpokwrviz2ROehwxTCwa0naRd_N9eFhvTRnP3u7L0xn3ll4iOf8Q4jS0mVLpjyTa5WiBkN5xi9hkFxd__p98Pah_Yf0hVQ2ldGSyTtAMmdM1Bvzad-kdZ_wW0jcctIla9bLnOo-Enr14EsGvziMh_QTZ3HQtJuToSKZ11xkNgaz7an5de6PuF5ISXQzxigpFVIkG765aEDVtEnFkMO0xyPGLg
JWT Token Configuration bölümünde belirttiğiniz Remove Prefix parametresinin değeri ile JWT belirtecinin birleştirilmiş hali. Örnek değer, Remove Prefix değerininBearerolarak ayarlandığını varsayar.Önemliİstek başlığında bulunan JWT parametresinin ön eki ve boşluğu, JWT Token Configuration bölümünde belirttiğiniz Remove Prefix değeriyle tam olarak eşleşmelidir. Aksi takdirde tetikleyici belirteci ayrıştıramaz ve
invalid or expired jwthatası döndürür.