From de09a3bd587078c9706ac4e7f6065ff1270c55de Mon Sep 17 00:00:00 2001 From: hugcubi <hugo.cubino@estudiantes.uva.es> Date: Tue, 24 Dec 2024 13:01:17 +0100 Subject: [PATCH] Ligeros reajustes --- .../com/uva/authentication/api/UserAPI.java | 4 +-- .../controllers/AuthController.java | 7 ++-- .../controllers/TokenController.java | 4 +-- .../authentication/models/TokenRequest.java | 16 --------- .../models/{ => auth}/LoginRequest.java | 2 +- .../models/{ => auth}/RegisterRequest.java | 2 +- .../models/{ => jwt}/JwtAuth.java | 2 +- .../{TokenData.java => jwt/JwtData.java} | 33 ++++++++++++++----- .../authentication/models/remote/User.java | 2 +- .../authentication/services/AuthService.java | 13 ++++---- .../authentication/services/TokenService.java | 6 ++-- .../com/uva/authentication/utils/JwtUtil.java | 15 +++++---- .../src/main/resources/application.properties | 7 ++-- 13 files changed, 59 insertions(+), 54 deletions(-) delete mode 100644 java/services/auth/src/main/java/com/uva/authentication/models/TokenRequest.java rename java/services/auth/src/main/java/com/uva/authentication/models/{ => auth}/LoginRequest.java (87%) rename java/services/auth/src/main/java/com/uva/authentication/models/{ => auth}/RegisterRequest.java (89%) rename java/services/auth/src/main/java/com/uva/authentication/models/{ => jwt}/JwtAuth.java (84%) rename java/services/auth/src/main/java/com/uva/authentication/models/{TokenData.java => jwt/JwtData.java} (50%) diff --git a/java/services/auth/src/main/java/com/uva/authentication/api/UserAPI.java b/java/services/auth/src/main/java/com/uva/authentication/api/UserAPI.java index 6239c85..6e6edce 100644 --- a/java/services/auth/src/main/java/com/uva/authentication/api/UserAPI.java +++ b/java/services/auth/src/main/java/com/uva/authentication/api/UserAPI.java @@ -11,7 +11,7 @@ import org.springframework.stereotype.Component; import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.RestTemplate; -import com.uva.authentication.models.RegisterRequest; +import com.uva.authentication.models.auth.RegisterRequest; import com.uva.authentication.models.remote.User; @Component @@ -20,7 +20,7 @@ public class UserAPI { @Autowired private RestTemplate restTemplate; - @Value("${external.services.users.url}") + @Value("${services.external.users.url}") private String USER_API_URL; /** diff --git a/java/services/auth/src/main/java/com/uva/authentication/controllers/AuthController.java b/java/services/auth/src/main/java/com/uva/authentication/controllers/AuthController.java index 7dfa56a..0dd5aee 100644 --- a/java/services/auth/src/main/java/com/uva/authentication/controllers/AuthController.java +++ b/java/services/auth/src/main/java/com/uva/authentication/controllers/AuthController.java @@ -8,7 +8,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.HttpClientErrorException; -import com.uva.authentication.models.*; +import com.uva.authentication.models.auth.LoginRequest; +import com.uva.authentication.models.auth.RegisterRequest; import com.uva.authentication.services.AuthService; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -47,7 +48,7 @@ public class AuthController { @PostMapping("/password") public ResponseEntity<?> changePassword(@RequestBody Map<String, String> json, - @RequestHeader(value = "Authorization", required = false) String authorization) { + @RequestHeader(value = "Authorization", required = true) String authorization) { if (authorization == null || !authorization.startsWith("Bearer ")) return new ResponseEntity<>(HttpStatus.FORBIDDEN); @@ -61,7 +62,7 @@ public class AuthController { @PostMapping("/delete/{id}") public Object postMethodName(@PathVariable int id, @RequestBody Map<String, String> json, - @RequestHeader(value = "Authorization", required = false) String authorization) { + @RequestHeader(value = "Authorization", required = true) String authorization) { if (authorization == null || !authorization.startsWith("Bearer ")) return new ResponseEntity<>(HttpStatus.FORBIDDEN); diff --git a/java/services/auth/src/main/java/com/uva/authentication/controllers/TokenController.java b/java/services/auth/src/main/java/com/uva/authentication/controllers/TokenController.java index 3e33376..9f53758 100644 --- a/java/services/auth/src/main/java/com/uva/authentication/controllers/TokenController.java +++ b/java/services/auth/src/main/java/com/uva/authentication/controllers/TokenController.java @@ -9,11 +9,11 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.fasterxml.jackson.databind.JsonNode; -import com.uva.authentication.models.JwtAuth; +import com.uva.authentication.models.jwt.JwtAuth; import com.uva.authentication.services.TokenService; @RestController -@RequestMapping("/token") +@RequestMapping("token") public class TokenController { @Autowired diff --git a/java/services/auth/src/main/java/com/uva/authentication/models/TokenRequest.java b/java/services/auth/src/main/java/com/uva/authentication/models/TokenRequest.java deleted file mode 100644 index e63522e..0000000 --- a/java/services/auth/src/main/java/com/uva/authentication/models/TokenRequest.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.uva.authentication.models; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@Getter -@Setter -@Data -@NoArgsConstructor -@AllArgsConstructor -public class TokenRequest { - private String token; -} diff --git a/java/services/auth/src/main/java/com/uva/authentication/models/LoginRequest.java b/java/services/auth/src/main/java/com/uva/authentication/models/auth/LoginRequest.java similarity index 87% rename from java/services/auth/src/main/java/com/uva/authentication/models/LoginRequest.java rename to java/services/auth/src/main/java/com/uva/authentication/models/auth/LoginRequest.java index 0c786ec..d40def5 100644 --- a/java/services/auth/src/main/java/com/uva/authentication/models/LoginRequest.java +++ b/java/services/auth/src/main/java/com/uva/authentication/models/auth/LoginRequest.java @@ -1,4 +1,4 @@ -package com.uva.authentication.models; +package com.uva.authentication.models.auth; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/java/services/auth/src/main/java/com/uva/authentication/models/RegisterRequest.java b/java/services/auth/src/main/java/com/uva/authentication/models/auth/RegisterRequest.java similarity index 89% rename from java/services/auth/src/main/java/com/uva/authentication/models/RegisterRequest.java rename to java/services/auth/src/main/java/com/uva/authentication/models/auth/RegisterRequest.java index 4ef2db2..3f99284 100644 --- a/java/services/auth/src/main/java/com/uva/authentication/models/RegisterRequest.java +++ b/java/services/auth/src/main/java/com/uva/authentication/models/auth/RegisterRequest.java @@ -1,4 +1,4 @@ -package com.uva.authentication.models; +package com.uva.authentication.models.auth; import com.uva.authentication.models.remote.UserRol; diff --git a/java/services/auth/src/main/java/com/uva/authentication/models/JwtAuth.java b/java/services/auth/src/main/java/com/uva/authentication/models/jwt/JwtAuth.java similarity index 84% rename from java/services/auth/src/main/java/com/uva/authentication/models/JwtAuth.java rename to java/services/auth/src/main/java/com/uva/authentication/models/jwt/JwtAuth.java index 1736439..6470edf 100644 --- a/java/services/auth/src/main/java/com/uva/authentication/models/JwtAuth.java +++ b/java/services/auth/src/main/java/com/uva/authentication/models/jwt/JwtAuth.java @@ -1,4 +1,4 @@ -package com.uva.authentication.models; +package com.uva.authentication.models.jwt; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/java/services/auth/src/main/java/com/uva/authentication/models/TokenData.java b/java/services/auth/src/main/java/com/uva/authentication/models/jwt/JwtData.java similarity index 50% rename from java/services/auth/src/main/java/com/uva/authentication/models/TokenData.java rename to java/services/auth/src/main/java/com/uva/authentication/models/jwt/JwtData.java index d503f91..044482a 100644 --- a/java/services/auth/src/main/java/com/uva/authentication/models/TokenData.java +++ b/java/services/auth/src/main/java/com/uva/authentication/models/jwt/JwtData.java @@ -1,55 +1,72 @@ -package com.uva.authentication.models; +package com.uva.authentication.models.jwt; import java.lang.reflect.Field; +import java.util.Date; import com.auth0.jwt.interfaces.Claim; import com.auth0.jwt.interfaces.DecodedJWT; +import com.uva.authentication.models.remote.UserRol; import lombok.Data; import lombok.Getter; import lombok.Setter; +import lombok.ToString; @Getter @Setter @Data -public class TokenData { +@ToString +public class JwtData { private Integer id; private String name; private String email; - private String rol; + private UserRol rol; private String service; private String subject; private String audience; private Long ttl; - public TokenData(DecodedJWT decoded, long ttl) { + private Date issuedAt; + private Date expiresAt; + + public JwtData(DecodedJWT decoded, long ttl) { subject = decoded.getSubject(); - audience = decoded.getAudience().get(0); + if (decoded.getAudience() != null && !decoded.getAudience().isEmpty()) + audience = decoded.getAudience().get(0); this.ttl = ttl; + issuedAt = decoded.getIssuedAt(); + expiresAt = decoded.getExpiresAt(); for (Field field : this.getClass().getDeclaredFields()) { field.setAccessible(true); // Verificamos si el campo está en el mapa y asignamos el valor Claim claim = decoded.getClaim(field.getName()); - if (!claim.isMissing()) { + System.out.println(field.getName() + " => " + claim.isMissing() + " " + claim.isNull() + " " + claim.asString() + + " " + decoded.getClaim("rol").asString()); + if (!claim.isNull()) { + String value = claim.asString(); try { // Dependiendo del tipo de campo, asignamos el valor if (field.getType() == Integer.class) { - field.set(this, Integer.parseInt(claim.asString())); + field.set(this, claim.asInt()); } else if (field.getType() == String.class) { field.set(this, claim.asString()); + } else if (field.getType() == UserRol.class) { + if (value != null) + field.set(this, UserRol.valueOf(value)); } } catch (IllegalAccessException e) { e.printStackTrace(); } } } + System.out.println("\n\n\n<-- " + this + " -->"); } public boolean isAdmin() { - return rol != null && rol == "ADMIN"; + return rol != null && rol == UserRol.ADMIN; } } \ No newline at end of file diff --git a/java/services/auth/src/main/java/com/uva/authentication/models/remote/User.java b/java/services/auth/src/main/java/com/uva/authentication/models/remote/User.java index 10049fc..91c82e1 100644 --- a/java/services/auth/src/main/java/com/uva/authentication/models/remote/User.java +++ b/java/services/auth/src/main/java/com/uva/authentication/models/remote/User.java @@ -1,6 +1,6 @@ package com.uva.authentication.models.remote; -import com.uva.authentication.models.RegisterRequest; +import com.uva.authentication.models.auth.RegisterRequest; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/java/services/auth/src/main/java/com/uva/authentication/services/AuthService.java b/java/services/auth/src/main/java/com/uva/authentication/services/AuthService.java index 03f2b6c..d9c0004 100644 --- a/java/services/auth/src/main/java/com/uva/authentication/services/AuthService.java +++ b/java/services/auth/src/main/java/com/uva/authentication/services/AuthService.java @@ -6,13 +6,12 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.HttpClientErrorException; -import org.springframework.web.servlet.function.EntityResponse; import com.uva.authentication.api.UserAPI; -import com.uva.authentication.models.JwtAuth; -import com.uva.authentication.models.LoginRequest; -import com.uva.authentication.models.RegisterRequest; -import com.uva.authentication.models.TokenData; +import com.uva.authentication.models.auth.LoginRequest; +import com.uva.authentication.models.auth.RegisterRequest; +import com.uva.authentication.models.jwt.JwtAuth; +import com.uva.authentication.models.jwt.JwtData; import com.uva.authentication.models.remote.User; import com.uva.authentication.utils.JwtUtil; import com.uva.authentication.utils.SecurityUtils; @@ -78,7 +77,7 @@ public class AuthService { } public ResponseEntity<?> changePassword(String token, String actualPass, String newPass) { - TokenData decoded = jwtUtil.decodeToken(token); + JwtData decoded = jwtUtil.decodeToken(token); if (decoded == null) return new ResponseEntity<>(HttpStatus.FORBIDDEN); @@ -102,7 +101,7 @@ public class AuthService { } public ResponseEntity<?> deleteUser(String token, int id, String password) { - TokenData decoded = jwtUtil.decodeToken(token); + JwtData decoded = jwtUtil.decodeToken(token); if (decoded == null) return new ResponseEntity<>(HttpStatus.FORBIDDEN); diff --git a/java/services/auth/src/main/java/com/uva/authentication/services/TokenService.java b/java/services/auth/src/main/java/com/uva/authentication/services/TokenService.java index a2a0080..f49fcd0 100644 --- a/java/services/auth/src/main/java/com/uva/authentication/services/TokenService.java +++ b/java/services/auth/src/main/java/com/uva/authentication/services/TokenService.java @@ -5,8 +5,8 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; -import com.uva.authentication.models.JwtAuth; -import com.uva.authentication.models.TokenData; +import com.uva.authentication.models.jwt.JwtAuth; +import com.uva.authentication.models.jwt.JwtData; import com.uva.authentication.utils.JwtUtil; @Service @@ -27,7 +27,7 @@ public class TokenService { } public ResponseEntity<?> getTokenInf(String token) { - TokenData decoded = jwtUtil.decodeToken(token); + JwtData decoded = jwtUtil.decodeToken(token); if (decoded == null) return new ResponseEntity<>("Token has expire or is malformed", HttpStatus.FORBIDDEN); return ResponseEntity.ok(decoded); diff --git a/java/services/auth/src/main/java/com/uva/authentication/utils/JwtUtil.java b/java/services/auth/src/main/java/com/uva/authentication/utils/JwtUtil.java index d633043..d84db0a 100644 --- a/java/services/auth/src/main/java/com/uva/authentication/utils/JwtUtil.java +++ b/java/services/auth/src/main/java/com/uva/authentication/utils/JwtUtil.java @@ -8,7 +8,7 @@ import org.springframework.web.client.HttpClientErrorException; import com.auth0.jwt.JWT; import com.auth0.jwt.algorithms.Algorithm; -import com.uva.authentication.models.TokenData; +import com.uva.authentication.models.jwt.JwtData; import com.uva.authentication.models.remote.User; import com.auth0.jwt.interfaces.DecodedJWT; @@ -32,14 +32,15 @@ public class JwtUtil { private String token; - private static final String SERVICE = "AUTH_SERVICES"; + @Value("${spring.application.name}") + private String service; public String getOwnInternalToken() { // Si no hay token, no es valido o quedan 10 seg para caducar se genera otro if (token == null || validate(token) == null || decodeToken(token).getTtl() <= 10) { - token = generateInternalToken(SERVICE); + token = generateInternalToken(service); } return token; @@ -70,6 +71,8 @@ public class JwtUtil { public String generateToken(User user) { Algorithm algorithm = Algorithm.HMAC256(secretKey); + System.out.println("\n\n<-- " + user + " " + user.getId() + " -->"); + return JWT .create() @@ -77,7 +80,7 @@ public class JwtUtil { .withIssuedAt(new Date()) .withExpiresAt(new Date(System.currentTimeMillis() + extJwtExpiration * 1000)) - .withSubject(SERVICE) + .withSubject(service) .withAudience("EXTERNAL") // DATA @@ -97,11 +100,11 @@ public class JwtUtil { } } - public TokenData decodeToken(String token) { + public JwtData decodeToken(String token) { DecodedJWT decoded = validate(token); if (decoded == null) return null; - return new TokenData(decoded, calculateTTL(decoded)); + return new JwtData(decoded, calculateTTL(decoded)); } private long calculateTTL(DecodedJWT decodedJWT) { diff --git a/java/services/auth/src/main/resources/application.properties b/java/services/auth/src/main/resources/application.properties index ad4a9a5..d701662 100644 --- a/java/services/auth/src/main/resources/application.properties +++ b/java/services/auth/src/main/resources/application.properties @@ -2,9 +2,10 @@ spring.application.name=authService server.port=8101 security.jwt.secret-key=MiClaveDeSeguridadMuyLargaParaQueNoFalleSpringBoot -# 1h in millisecond +# 1h in seconds security.jwt.external.expiration=3600 -security.jwt.internal.expiration=20 +# 10min in seconds +security.jwt.internal.expiration=600 security.jwt.kid=cYz3kNRLAirxVhHXQ5rh5xKrOwHwZVui -external.services.users.url=http://localhost:8201/users \ No newline at end of file +services.external.users.url=http://localhost:8201/users \ No newline at end of file -- GitLab