web-dev-qa-db-fra.com

Spring Security avec AWS IAM ou Cognito

J'ai écrit plusieurs applications Web back-end Spring 4 qui servent les API RESTful. J'ai même réussi à les sécuriser avec Spring Web Security. 

Dans un cas, nous avons notre propre instance d'OpenAm installée. Un utilisateur qui se connecte à l'interface utilisateur du client peut se connecter à OpenAM et l'application Web du client reçoit un jeton dans un cookie. Nous transmettons ce jeton au serveur dans un en-tête, puis Spring Security utilise un service CustomeUserDetailsService pour vérifier ce jeton contre OpenAM afin de déterminer s’il est valide. Si tel est le cas, nous créons un utilisateur dans le contexte de sécurité Spring, attribuons des rôles, puis vérifions si ces rôles sont valides par rapport à l'API. Si tel est le cas, l'API s'exécute, sinon l'utilisateur obtient une erreur de sécurité 401. Je crois que c'est OAuth2.

Nous avons également réussi à faire exactement la même chose avec Okta. Nous avons notre propre interface utilisateur Web avec notre propre page de connexion. L’UI appelle Okta et récupère deux (2) jetons. Nous concaténons ces jetons et les transmettons au serveur principal qui effectue le même processus que celui décrit ci-dessus. Je pense aussi que c'est Oauth2.

Je travaille actuellement sur un nouveau projet et cette fois, je souhaite sécuriser mon application Web avec AWS IAM, car l'interface frontale et inversement sera hébergée sur une instance AWS EC2. 

J'ai parcouru le Web pour savoir exactement comment faire cela. Il existe un SDK AWS IAM et AWS Cognito. Mon premier examen de IAM ne montrait pas vraiment un Oauth2, j'avais vu OpenID et SAML. Je sais que je manque de connaissances sur OpenID vs Oauth2 vs SAML. 

Je recherche donc des liens vers des bases de code, des exemples de code ou une documentation qui m'aideront à sécuriser mes API principales avec Spring Security à l'aide de AWS IAM et/ou de Cognito. Et BTW, je ne veux pas utiliser Spring API Gateway, car Spring Web Security le fait déjà pour moi.

Merci d'avance pour votre aide!

6
tjholmes66

Ok, j’ai fait certaines de mes propres recherches à ce sujet et le site AWS m’a donné ceci:

AWS Identity and Access Management (IAM) vous permet de contrôler de manière sécurisée L'accès aux services et aux ressources AWS pour vos utilisateurs. Avec IAM, vous pouvez créer et gérer des utilisateurs et des groupes AWS, et utiliser des autorisations Pour autoriser et refuser leur accès aux ressources AWS.

Mais je ne cherche pas cela. J'ai une application Web, et j'ai peut-être aussi un côté mobile. Je ne veux tout simplement pas avoir à écrire dans la gestion des utilisateurs, ou gérer mes propres sessions de connexion et autorisations, etc. Donc, je pense que dans ce cas:

Amazon Cognito vous permet d'ajouter facilement une inscription et une connexion utilisateur à vos applications Web et mobiles . Avec Amazon Cognito, vous avez également la possibilité d'authentifier les utilisateurs via des fournisseurs d'identité sociale tels que Facebook, Ou Amazon, avec des solutions d'identité SAML ou en utilisant votre propre . système d'identité. En outre, Amazon Cognito vous permet de sauvegarder les données Localement sur les périphériques des utilisateurs, ce qui permet à vos applications de fonctionner même lorsque Les périphériques sont hors ligne. Vous pouvez ensuite synchroniser les données sur les appareils des utilisateurs Afin que leur expérience d'application reste cohérente quel que soit le Appareil utilisé.

Avec Amazon Cognito, vous pouvez vous concentrer sur la création d'expériences applicatives exceptionnelles Au lieu de vous préoccuper de la création, de la sécurisation et de la mise à l'échelle d'une solution Pour gérer la gestion des utilisateurs, l'authentification et la synchronisation sur plusieurs périphériques.

Donc, AWS Cognito c'est ...

1
tjholmes66