27,5. Authentification et autorisation dans les API avec API Gateway et Lambda : utilisation de jetons JWT pour l'authentification et l'autorisation
L'authentification et l'autorisation sont des éléments fondamentaux de toute application. Ils garantissent que l'utilisateur est bien celui qu'il prétend être (authentification) et qu'il a la permission de faire ce qu'il essaie de faire (autorisation). Dans le contexte des API REST, cela est particulièrement important car ces API sont souvent exposées sur Internet et constituent donc des cibles potentielles d'abus.
Une manière courante d'implémenter l'authentification et l'autorisation dans les API REST consiste à utiliser des jetons JWT (JSON Web Tokens). JWT est un standard ouvert qui définit un moyen compact et indépendant de transmettre des informations entre les parties sous forme d'objet JSON. Ces informations peuvent être vérifiées et fiables car elles sont signées numériquement. Les JWT peuvent être signés à l'aide d'un secret (avec l'algorithme HMAC) ou d'une paire de clés publique/privée utilisant RSA ou ECDSA.
Dans un scénario typique, l'utilisateur s'authentifie en fournissant des informations d'identification, telles qu'un nom d'utilisateur et un mot de passe. Si les informations d'identification sont correctes, le serveur génère un jeton JWT et le renvoie au client. Le client inclut ensuite ce jeton dans chaque requête ultérieure adressée au serveur. Le serveur vérifie le token et, s'il est valide, traite la requête. Si le jeton n'est pas valide (par exemple, s'il a expiré), le serveur rejette la demande.
Authentification et autorisation avec API Gateway et Lambda
AWS API Gateway et AWS Lambda sont deux services puissants qui peuvent être utilisés pour créer et héberger des API REST. Ils prennent également en charge l'authentification et l'autorisation à l'aide de jetons JWT.
API Gateway peut être configurée pour exiger un jeton JWT pour certaines routes. Cela se fait à l'aide d'une fonctionnalité appelée « Autorisateurs de jetons JWT ». Un autorisateur de jeton JWT est une fonction Lambda qui reçoit un jeton JWT, vérifie sa validité et renvoie une politique d'accès qui spécifie les actions que le détenteur du jeton est autorisé à effectuer.
Voici un exemple de la façon dont cela pourrait fonctionner :
- Le client s'authentifie en fournissant ses informations d'identification.
- Le serveur vérifie les informations d'identification et, si elles sont correctes, génère un jeton JWT et le renvoie au client.
- Le client inclut le jeton JWT dans chaque requête ultérieure adressée au serveur.
- API Gateway reçoit la requête et extrait le jeton JWT.
- API Gateway appelle la fonction Lambda JWT Token Authorizer, en transmettant le jeton JWT comme argument.
- La fonction Lambda vérifie la validité du jeton JWT. Si le jeton est valide, la fonction Lambda renvoie une politique d'accès qui spécifie les actions que le détenteur du jeton est autorisé à effectuer.
- API Gateway vérifie la stratégie d'accès renvoyée par la fonction Lambda. Si la stratégie autorise l'action demandée, API Gateway traite la demande. Si la stratégie n'autorise pas l'action demandée, API Gateway rejette la demande.
Ce processus garantit que seuls les utilisateurs authentifiés disposant des autorisations appropriées peuvent accéder à vos API REST.
Conclusion
L'authentification et l'autorisation sont des éléments fondamentaux de toute application et l'utilisation de jetons JWT est un moyen efficace d'implémenter ces fonctionnalités dans les API REST. AWS API Gateway et AWS Lambda offrent une prise en charge robuste de l'authentification et de l'autorisation à l'aide de jetons JWT, ce qui en fait un excellent choix pour développer des API REST sécurisées.