Dans Function Compute, vous pouvez configurer l'authentification JSON Web Token (JWT) pour un déclencheur HTTP. Cette configuration garantit que seuls les clients disposant d'un JWT valide accèdent à votre fonction. Elle renforce ainsi la sécurité de votre service HTTP tout en prévenant les accès non autorisés et les attaques malveillantes.
Informations générales
Présentation
Function Compute permet d'activer l'authentification JWT pour un déclencheur HTTP. Défini dans la norme RFC 7519, le JWT est une méthode d'authentification des requêtes basée sur des jetons. Les informations d'état de l'utilisateur sont stockées dans un token fourni par le client, ce qui dispense la fonction (serveur) de conserver ces données. Il s'agit donc d'une méthode d'authentification adaptée aux architectures serverless. Function Compute utilise le jeu de clés JSON Web Key Set (JWKS) public configuré pour un déclencheur HTTP afin d'authentifier les requêtes HTTP via JWT. Selon la configuration du déclencheur, Function Compute peut transmettre les claims en tant que paramètres à la fonction. Votre fonction se concentre ainsi sur la logique métier plutôt que sur l'authentification des requêtes. Pour plus d'informations sur le processus et les principes fondamentaux de l'authentification par token JWT, consultez les rubriques Authentification par jeton basée sur JWT et Introduction au JWT.
Fonctionnement de l'authentification JWT
La figure précédente illustre le flux de travail d'authentification JWT pour un déclencheur HTTP dans Function Compute utilisant un algorithme de chiffrement asymétrique. Les étapes sont les suivantes :
Le client envoie une requête d'authentification à un service d'autorisation personnalisé. Cette requête comprend généralement le nom d'utilisateur et le mot de passe de l'utilisateur final.
Le service d'autorisation personnalisé valide les identifiants de la requête, tels que le nom d'utilisateur et le mot de passe. Après validation, il utilise une clé privée pour générer un jeton standard.
Le service d'autorisation personnalisé renvoie une réponse contenant le jeton au client. Le client doit mettre en cache ce
tokenlocalement.Le client adresse une requête métier incluant le jeton au déclencheur HTTP.
Le déclencheur HTTP utilise la clé publique configurée pour vérifier le jeton présent dans la requête.
Une fois le jeton vérifié, le déclencheur transmet la requête à la fonction protégée.
La fonction protégée traite la requête métier et retourne une réponse.
Le déclencheur HTTP transfère la réponse métier au client.
Prérequis
Créez une fonction et un déclencheur HTTP. Pour plus d'informations, consultez les rubriques Créer une fonction et Créer un déclencheur.
Limites
Vous pouvez utiliser n'importe quelle méthode pour générer et distribuer des JWT. Function Compute authentifie les JWT à l'aide du JWKS public configuré pour le déclencheur.
Function Compute prend en charge les JSON Web Key (JWK) sans
kid(ID de clé).Le déclencheur peut lire un jeton depuis un
headerde requête, un paramètre deQuery(pour les requêtes GET), un paramètre de formulaire (pour les requêtes POST) ou uncookie.Vous pouvez transférer les
claimsvers la fonction sous forme deheader, de paramètre de formulaire (pour les requêtes POST) ou decookie.-
Function Compute permet de configurer un JWKS pour un déclencheur HTTP. Le système recherche dans le JWKS une JWK publique dont le
kidcorrespond à celui dutoken. Il utilise ensuite cette clé publique pour vérifier la signature dutoken. Un JWKS associé à un déclencheur ne peut contenir qu'une seule JWK dont lekidest absent ou constitue une chaîne vide.Le JWT de Function Compute prend en charge les algorithmes suivants.
Algorithme de signature
Valeur Alg
RSASSA-PKCS1-V1_5
RS256, RS384, RS512
RSASSA-PSS
PS256, PS384, PS512
Courbe elliptique (ECDSA)
ES256, ES384, ES512
HMAC
HS256, HS384, HS512
EdDSA
EdDSA
ImportantL'algorithme de signature HMAC repose sur un chiffrement symétrique et offre un niveau de sécurité inférieur. Nous recommandons d'utiliser un algorithme de chiffrement asymétrique plus sûr.
Lorsque vous employez un algorithme de chiffrement asymétrique, votre JWT ne doit contenir que des informations relatives à la clé publique pour des raisons de sécurité. Évitez d'y inclure des informations sur la clé privée.
Nous conseillons d'utiliser HTTPS pour protéger les informations sensibles telles que le
tokendans les requêtes, afin d'éviter toute fuite de jeton.
Procédure
Étape 1 : Configurer l'authentification JWT
Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, choisissez .
Dans la barre de navigation supérieure, sélectionnez une région. Sur la page Functions, cliquez sur la fonction cible.
Sur la page de détails de la fonction, cliquez sur l'onglet Trigger. Repérez le déclencheur HTTP et cliquez sur Modify dans la colonne Actions.
-
Dans le panneau Edit Trigger, configurez les paramètres suivants, puis cliquez sur OK.
Pour Authentication Method, sélectionnez JWT Authentication.
-
Configurez le paramètre JWKS.
Pour configurer l'authentification JWT pour un déclencheur HTTP, fournissez un JWKS valide. Vous pouvez générer votre propre JWKS ou recourir à un outil en ligne en recherchant « JSON Web Key Generator », comme mkjwk.org. Si vous possédez une clé au format PEM, utilisez un outil tel que jwx pour la convertir au format JWKS.
Cette rubrique prend pour exemple la génération d'un JWKS via mkjwk.org. Comme illustré dans la figure suivante, définissez Key Use sur Signature, Algorithm sur RS256 et Show X.509 sur Yes, puis cliquez sur Generate. Utilisez la clé privée (① dans la figure) dans votre code pour émettre le jeton JWT ; conservez-la donc en lieu sûr. Copiez le contenu de la clé publique (② dans la figure) et collez-le dans le tableau keys de la configuration JWKS dans la console.


Le code suivant fournit un exemple de configuration JWKS.
{ "keys": [ { "alg": "RS256", "e": "AQAB", "kty": "RSA", "n": "u1LWgoomekdOMfB1lEe96OHehd4XRNCbZRm96RqwOYTTc28Sc_U5wKV2umDzolfoI682ct2BNnRRahYgZPhbOCzHYM6i8sRXjz9Ghx3QHw9zrYACtArwQxrTFiejbfzDPGdPrMQg7T8wjtLtkSyDmCzeXpbIdwmxuLyt_ahLfHelr94kEksMDa42V4Fi5bMW4cCLjlEKzBEHGmFdT8UbLPCvpgsM84JK63e5ifdeI9NdadbC8ZMiR--dFCujT7AgRRyMzxgdn2l-nZJ2ZaYzbLUtAW5_U2kfRVkDNa8d1g__2V5zjU6nfLJ1S2MoXMgRgDPeHpEehZVu2kNaSFvDUQ", "use": "sig" } ] } -
Dans la section JWT Token Configuration, spécifiez l'emplacement du
Tokenainsi que son nomToken.L'emplacement du
Tokenpeut être Header, Cookie, les paramètres de requête (GET) ou les paramètres de formulaire (POST). Si l'emplacement duTokenest défini sur Header, spécifiez également le Parameter Name et le paramètre Remove Prefix. Function Compute supprime le préfixe indiqué dans Remove Prefix lors de la récupération du jeton.
-
Dans la section JWT Claim Conversion, indiquez l'emplacement de transmission du paramètre, le nom du paramètre d'origine et le nouveau nom de paramètre pour la fonction.
Vous pouvez mapper les claims vers un paramètre Header, Cookie ou Form (POST).

-
Définissez le mode de correspondance des requêtes.
Match All : toutes les requêtes HTTP nécessitent une authentification JWT.
Whitelist Mode : les requêtes HTTP correspondant aux chemins spécifiés dans la Whitelist of Request Paths ne nécessitent pas d'authentification JWT. Toutes les autres requêtes y sont soumises.
Blacklist Mode : les requêtes HTTP correspondant aux chemins spécifiés dans la Blacklist of Request Paths nécessitent une authentification JWT. Toutes les autres requêtes en sont dispensées.
Les modes Whitelist Mode et Blacklist Mode prennent en charge les deux types de correspondance suivants :
-
Correspondance exacte
Un chemin de requête ne correspond que s'il est strictement identique au chemin configuré. Par exemple, si vous définissez la Blacklist of Request Paths sur /a, les requêtes vers /a nécessitent une authentification JWT, contrairement aux requêtes vers /a/.
-
Correspondance approximative
Vous pouvez utiliser un caractère générique (*) dans un chemin, mais celui-ci doit impérativement se trouver à la fin du chemin. Par exemple, si vous définissez la Blacklist of Request Paths sur /login/*, toutes les requêtes vers des chemins ayant le préfixe /login/, telles que /login/a et /login/b/c/d, nécessitent une authentification JWT.
Étape 2 : Vérifier la configuration
Utilisez un outil de test, tel que Postman, pour vérifier l'accès au service HTTP conformément à la configuration JWT du déclencheur HTTP, en fournissant un endpoint, un jeton et d'autres informations.
-
Utilisez la clé privée au format X.509 PEM générée à l'étape 1 pour émettre un jeton JWT. Les étapes suivantes montrent comment générer un jeton à l'aide d'un script Python local.
-
Installez le module PyJWT.
pip install 'PyJWT>=2.0' -
Exécutez localement l'exemple de script Python suivant pour générer un jeton JWT.
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)
-
-
Utilisez Postman pour vérifier l'accessibilité du service HTTP.
Dans l'onglet Trigger de la page de détails de la fonction, récupérez l'endpoint public du déclencheur HTTP et saisissez-le dans le champ URL de Postman.
-
Dans Postman, configurez le paramètre du jeton dans les en-têtes et cliquez sur Send. Le tableau suivant fournit un exemple de configuration du jeton.
Paramètre
Valeur
Description
Clé
AuthenticationNom du paramètre spécifié dans la section JWT Token Configuration.
Valeur
Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9uIFNub3ciLCJhZG1pbiI6dHJ1ZSwiZXhwIjo0ODI5NTk3NjQxfQ.eRcobbpjAd3OSMxcWbmbicOTLjO2vuLR9F2QZMK4rz1JqfSRHgwQVqNxcfOIO9ckDMNlF_3jtdfCfvXfka-phJZpHmnaQJxmnOA8zA3R4wF4GUQdz5zkt74cK9jLAXpokwrviz2ROehwxTCwa0naRd_N9eFhvTRnP3u7L0xn3ll4iOf8Q4jS0mVLpjyTa5WiBkN5xi9hkFxd__p98Pah_Yf0hVQ2ldGSyTtAMmdM1Bvzad-kdZ_wW0jcctIla9bLnOo-Enr14EsGvziMh_QTZ3HQtJuToSKZ11xkNgaz7an5de6PuF5ISXQzxigpFVIkG765aEDVtEnFkMO0xyPGLgValeur du paramètre Remove Prefix spécifiée dans la section JWT Token Configuration, concaténée avec le jeton JWT. L'exemple suppose que Remove Prefix est défini sur
Bearer.ImportantLe préfixe et l'espace du paramètre JWT dans l'en-tête de la requête doivent correspondre exactement à la valeur de Remove Prefix spécifiée dans la section JWT Token Configuration. Dans le cas contraire, le déclencheur ne parvient pas à analyser le jeton et retourne une erreur
invalid or expired jwt.