2 votes

Sécuriser un SPA avec Spring Boot, OAuth et JWT ?

Je suis passé par ce tutoriel qui montre comment sécuriser une application à page unique à l'aide de plusieurs scénarios allant du plus simple à notre propre serveur d'autorisation qui délègue l'authentification à un fournisseur. Le premier scénario utilise le Code d'autorisation Subvention pour connecter l'utilisateur.

Supposons que nous remplacions le serveur OAuth de Facebook par le nôtre dans ce cas et que nous le configurions pour qu'il renvoie un jeton JWT.

Quel flux OAuth le SPA doit-il utiliser s'il veut utiliser le jeton JWT pour sécuriser les demandes par le biais d'un serveur périphérique qui équilibre la charge entre les serveurs de ressources ?

De plus, comment configurer spring boot / spring security si nous voulons utiliser le jeton JWT pour remplacer le support par défaut de JSESSION et CSRF dans spring ? Il est évident que le jeton JWT peut être utilisé pour remplacer ces deux fonctionnalités.

Mise à jour

D'après la réponse de Manish, en supposant que nous utilisons le flux implicite OAuth 2, nous.. :

  • Placez l'annotation @EnableResourceServer sur le serveur de ressources.
  • Utiliser un client OpenID Connect pour mettre en œuvre le flux d'implicite

Une fois que cela est fait, les requêtes POST sont-elles sécurisées en supposant que chaque requête inclut le jeton JWT en tant que Bearer Header, ou devons-nous également configurer CSRF ?

2voto

ManishSingh Points 549

Cela dépend de la sensibilité de votre application en matière de sécurité, mais le flux implicite est recommandé pour les clients publics (SPA).

Le tutoriel est basé sur le flux de code d'autorisation et si vous remplacez Facebook par votre STS, il utilisera toujours le flux de code d'autorisation car @EnableOAuth2Sso stocke le jeton JWT sur le serveur et envoie le cookie au navigateur. Il utilise également le jeton de rafraîchissement pour obtenir le nouveau jeton JWT. Il s'agit d'un flux personnalisé pour mettre en œuvre le flux de code d'autorisation avec un client public (SPA) basé sur le modèle de passerelle API.

Pour mettre en œuvre le flux implicite - N'utilisez pas @EnableOAuth2Sso côté serveur, exposez simplement l'API REST et sécurisez-la avec @EnableResourceServer. Et vous devez utiliser l'oidc-client pour implémenter le flux implicite. Le lien est ici. https://github.com/IdentityModel/oidc-client-js

La protection CSRF n'est nécessaire que si vous stockez un jeton JWT ou un identifiant de session dans le cookie du navigateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X