From 7395063bf22fbf7115960684542d0f4bc3a350bf Mon Sep 17 00:00:00 2001 From: Charles Mendiburu Date: Wed, 2 Apr 2025 15:18:27 +0200 Subject: [PATCH] mise en place d'un token d'authentification lors de la connexion --- Back-end/keystore.jceks | Bin 0 -> 419 bytes Back-end/keystore.jceks.old | Bin 0 -> 524 bytes Back-end/pom.xml | 6 ++++ .../com/example/starter/MainVerticle.java | 31 ++++++++++++++++-- Front-end/src/pages/Login.jsx | 5 ++- 5 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 Back-end/keystore.jceks create mode 100644 Back-end/keystore.jceks.old diff --git a/Back-end/keystore.jceks b/Back-end/keystore.jceks new file mode 100644 index 0000000000000000000000000000000000000000..1f4ee58eecd51583ed9ce700377ea534f988742d GIT binary patch literal 419 zcmXqLVw}&!$ZXKW=*h;Z)#lOmotKfFaX}NK6-yJN8Bo{=i1kpVf+&IWL?mB*r4$MvJlgP#tkfuYYiG#8Kl8YVdXW5G_XK$c?`5!M5MI>elOYb^|j04 zbJYh+nY7Fn+~Q|qQWs!iR50LSR4Rz;O9D1t$C@3kp#h7lta$zrTV<_jPDF#2^Zuze0{owz5MQIty!o3qDmjyDv zwqY-BUZ>7Iaa9TH-}dUs3H3aBs@*R=4DAdg;f~`JG31fsV#sBvWXNVnWvDbzL`aDm zim(WUWag$S7@C_Hn_3u}nwuG!SsM5n7#i@x9m&MV%D|!!J^N12kMA#%PefIBwPimk vz4L3uq#HXDzouGcZ+b7y_KQVi0-xcByzdE4yUZO=up1s-E&d`<8595j{2YcT literal 0 HcmV?d00001 diff --git a/Back-end/keystore.jceks.old b/Back-end/keystore.jceks.old new file mode 100644 index 0000000000000000000000000000000000000000..f00730b938444c782f8e4205f7e4aed10eba4d89 GIT binary patch literal 524 zcmX?i?%X*B1_mY|W&~np2G-ol?9@siZ|c{+Y17xdWne8XVlYn5&($j~&C^RRsw^nU z*DEN>FUw3xEz%24P0UG6@lVQ1O)hcEFY->U3@FMk0dn$-&W4|gd~UEi7-)1w5rbq_ zVp(DZOh2+VJ2Ts5hqs3mFfp)1Gw`P7CFiH4rUWDwCFT~FFfc_sMKcHh1wrF04(9cQCOVj0iO9KqWuA99Z>*Gc+PO3HK(D!PhRLh@`;Qr% z->j6})2P7e(VSv5XFUV^^tJ8l8UBeVDjzw=a8o@!aOXAYTHzcY{*Mg~q2U4xj9;lZ z3BI};{!Fd(($gPzgpO|KciFtX*5vQ*(0Q3p?S(fu+dRqg-jF{jKP~I0v}@5l%@m1+ z>7}&+TlUTFNGxFx3vhA`&n(ICbuo3!O9?5;EXYZ9aSg^PA-Qr&N~Yob^0W%s+@956 K9nM~4I}QMg&%^-$ literal 0 HcmV?d00001 diff --git a/Back-end/pom.xml b/Back-end/pom.xml index af8af27..2b51981 100644 --- a/Back-end/pom.xml +++ b/Back-end/pom.xml @@ -87,6 +87,12 @@ bcrypt 0.9.0 + + io.vertx + vertx-auth-jwt + 4.5.13 + + diff --git a/Back-end/src/main/java/com/example/starter/MainVerticle.java b/Back-end/src/main/java/com/example/starter/MainVerticle.java index 6a8bae1..50b00d3 100644 --- a/Back-end/src/main/java/com/example/starter/MainVerticle.java +++ b/Back-end/src/main/java/com/example/starter/MainVerticle.java @@ -13,15 +13,31 @@ import io.vertx.core.Promise; import io.vertx.ext.web.Router; import io.vertx.ext.web.RoutingContext; import at.favre.lib.crypto.bcrypt.BCrypt; +import io.vertx.ext.auth.jwt.JWTAuth; +import io.vertx.ext.auth.jwt.JWTAuthOptions; +import io.vertx.ext.auth.KeyStoreOptions; +import io.vertx.ext.auth.authentication.TokenCredentials; +import io.vertx.ext.web.handler.JWTAuthHandler; + public class MainVerticle extends AbstractVerticle { private DatabaseService databaseService; private Router router; // Déclaration du router en variable de classe + private JWTAuth jwtAuth; // Déclaration au niveau de la classe + @Override public void start(Promise startPromise) throws Exception { databaseService = new DatabaseService(vertx); + + this.jwtAuth = JWTAuth.create(vertx, new JWTAuthOptions() + .setKeyStore(new KeyStoreOptions() + .setPath("keystore.jceks") + .setPassword("secret"))); + + + // Initialisation du router router = Router.router(vertx); @@ -41,6 +57,8 @@ public class MainVerticle extends AbstractVerticle { router.get("/objet").handler(this::getParticularObject); router.post("/signup").handler(this::handleSignup); // Route pour l'inscription router.post("/login").handler(this::handleLogin); // Route pour la connexion + // Protéger toutes les routes commençant par "/api/" + router.route("/api/*").handler(JWTAuthHandler.create(jwtAuth)); // Création du serveur HTTP vertx.createHttpServer() @@ -54,6 +72,8 @@ public class MainVerticle extends AbstractVerticle { throwable.printStackTrace(); startPromise.fail(throwable); }); + + } // Récupération des objets @@ -173,6 +193,7 @@ public class MainVerticle extends AbstractVerticle { }); } + //Méthode de ocnnexion private void handleLogin(RoutingContext context) { JsonObject body = context.body().asJsonObject(); @@ -213,9 +234,15 @@ public class MainVerticle extends AbstractVerticle { BCrypt.Result verification = BCrypt.verifyer().verify(password.toCharArray(), storedHashedPassword); if (verification.verified) { - context.response() + System.out.println("Connexion réussi"); + //Génération du token JWT + JsonObject claims = new JsonObject().put("sub",email).put("role", "user"); + String token = jwtAuth.generateToken(claims); + + context.response() .setStatusCode(200) - .end(new JsonObject().put("message", "Connexion réussie").encode()); + .end(new JsonObject().put("token", token).encode()); + } else { context.response() .setStatusCode(401) diff --git a/Front-end/src/pages/Login.jsx b/Front-end/src/pages/Login.jsx index 5c2d30b..ebc3102 100644 --- a/Front-end/src/pages/Login.jsx +++ b/Front-end/src/pages/Login.jsx @@ -35,10 +35,9 @@ function Login() { throw new Error(data.error || "Erreur lors de la connexion"); } - alert("Connexion réussie !"); + localStorage.setItem("token", data.token); + navigate("/"); - // Redirection vers la page d'accueil après une connexion réussie - navigate("/home"); // Remplace "/home" par l'URL de ta page d'accueil } catch (error) { alert(error.message); }