From 8ed51560494781025a6519fc0a4845110315d978 Mon Sep 17 00:00:00 2001 From: Murillo Pezzuol Date: Wed, 9 Oct 2019 12:06:33 -0300 Subject: [PATCH] Final Project Base version 2.0.1 --- .DS_Store | Bin 0 -> 8196 bytes .../config/auth/OAuthConfiguration.java | 35 +++++++++++++++--- .../com/oauth2/config/auth/UserPrincipal.java | 3 +- .../auth/token/CustomTokenEnhancer.java | 27 ++++++++++++++ .../oauth2/controllers/AuthController.java | 6 +-- ...=> AuthUserAndRolesAndAuthoritiesDTO.java} | 8 +++- .../com/oauth2/utils/GeneratorPassword.java | 10 +++++ src/main/resources/application.yml | 2 +- 8 files changed, 77 insertions(+), 14 deletions(-) create mode 100644 .DS_Store create mode 100644 src/main/java/com/oauth2/config/auth/token/CustomTokenEnhancer.java rename src/main/java/com/oauth2/models/dto/auth/{AuthUserRoleAndAuthoritiesDTO.java => AuthUserAndRolesAndAuthoritiesDTO.java} (72%) create mode 100644 src/main/java/com/oauth2/utils/GeneratorPassword.java diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..775e3482e4a8f763f6f7427f100719ae679a9407 GIT binary patch literal 8196 zcmeHMTTC2P82*2tbY@Cr=tUUPt=rOKX(=uOh0Dh86RXBl-`d2)M5B$5Ug{+#M&d2e2YvC;Xf*Lj|1)Qn%2E=2QJc<5&iT&# zmzi_^^UXQ?&jJ9pWwcs=G5`>$GL+X*bA!V4tga||zNCN<$sa%mH#y@>B~3fI!a5KH z5eOm>L?DPj5P={9|Az?Bnazr@%DKf-`O?heS^0sSYVpP``lbn**( z=73R-K^sIMh``DSu-B&$Tu>nm<2m{JN69JEaNJ1bOU%nJSW~!G5F|lbFP(@@*fTL# zbu&(znm*31j;ZcM((lJ@+g$3a$pJ&3NywYpZOc^+OHX^whNhFr=%8U~_Dq|du{6iK zPmC)BK@`Ml&NptHX1(k=mx}aKpa(`FT+&-C5hxeRA^5*|~G`4?NE& zhW_RN#W@qbm^(|;nQrG_De|7n&ho45EJbOZ(tSkgNyr z?2Ku>gRGq)gKo#nWE3wKZ4Pa(+!JYNKGdrV|Ua%jiQ8i3c_(FZ%^yga_yw1wpEOP6r6|0;R$#WF2bvD1>S^r z-~+e@AHpZ_8GHlZ!;kPY`~ttiZ}0~SD58W#sNi<2z#SOD{n(5Lum#)jDE444_F)`P z;20)Q#c`a%)0jpV&*24p7$3pM@ELpoU&NR2Wqb|a!ng4%zKieSr}#N8^6}+mDckFh z*9ZKTI?G;6qOAX6EpO~blnr&>D|P)hl>NGh@w8;a#!Z{IR_xk)cjLjN17}tyd_-DL|SvDT-p-qCvNGp*O|&{`` zm0adc$I_N*TjM0pvURyjaCK8gAfJ!AjOG8GtAGE$Dd!dpI*33Jfxj04Ea-@Jw2|#< zyF1IZ!&FaFWrf)-aP(ZL@zQZZFC8ab`ooa=VKQYtQ6CpLl7z~?{vp6S@PqRomVS8# L=f6k9TdesL=%?ZG literal 0 HcmV?d00001 diff --git a/src/main/java/com/oauth2/config/auth/OAuthConfiguration.java b/src/main/java/com/oauth2/config/auth/OAuthConfiguration.java index 2bc92c0..a7cea3c 100644 --- a/src/main/java/com/oauth2/config/auth/OAuthConfiguration.java +++ b/src/main/java/com/oauth2/config/auth/OAuthConfiguration.java @@ -1,5 +1,7 @@ package com.oauth2.config.auth; +import java.util.Arrays; + import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -10,7 +12,13 @@ import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter; import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer; import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer; +import org.springframework.security.oauth2.provider.token.TokenEnhancer; +import org.springframework.security.oauth2.provider.token.TokenEnhancerChain; +import org.springframework.security.oauth2.provider.token.TokenStore; import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter; +import org.springframework.security.oauth2.provider.token.store.JwtTokenStore; + +import com.oauth2.config.auth.token.CustomTokenEnhancer; @Configuration @EnableAuthorizationServer @@ -37,6 +45,7 @@ public class OAuthConfiguration extends AuthorizationServerConfigurerAdapter { @Value("${jwt.refreshTokenValiditySeconds}") private int refreshTokenValiditySeconds;//30days + public OAuthConfiguration(AuthenticationManager authenticationManager, PasswordEncoder passwordEncoder, UserDetailsService userService) { this.authenticationManager = authenticationManager; this.passwordEncoder = passwordEncoder; @@ -51,22 +60,36 @@ public void configure(ClientDetailsServiceConfigurer clients) throws Exception { .accessTokenValiditySeconds(accessTokenValiditySeconds) .refreshTokenValiditySeconds(refreshTokenValiditySeconds) .authorizedGrantTypes(authorizedGrantTypes) - .scopes("read", "write") - .resourceIds("api"); + .scopes("read", "write"); } @Override public void configure(final AuthorizationServerEndpointsConfigurer endpoints) { - endpoints - .accessTokenConverter(accessTokenConverter()) + TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain(); + tokenEnhancerChain.setTokenEnhancers(Arrays.asList(tokenEnhacer(), accessTokenConverter())); + + endpoints + .tokenStore(tokenStore()) + .tokenEnhancer(tokenEnhancerChain) + .reuseRefreshTokens(false) .userDetailsService(userService) .authenticationManager(authenticationManager); } @Bean JwtAccessTokenConverter accessTokenConverter() { - JwtAccessTokenConverter converter = new JwtAccessTokenConverter(); - return converter; + JwtAccessTokenConverter accessTokenConverter = new JwtAccessTokenConverter(); + accessTokenConverter.setSigningKey("maracuja"); + return accessTokenConverter; } + + @Bean + public TokenStore tokenStore(){ + return new JwtTokenStore(accessTokenConverter()); + } + + public TokenEnhancer tokenEnhacer() { + return new CustomTokenEnhancer(); + } } \ No newline at end of file diff --git a/src/main/java/com/oauth2/config/auth/UserPrincipal.java b/src/main/java/com/oauth2/config/auth/UserPrincipal.java index 534ddce..9301e7f 100644 --- a/src/main/java/com/oauth2/config/auth/UserPrincipal.java +++ b/src/main/java/com/oauth2/config/auth/UserPrincipal.java @@ -36,10 +36,9 @@ public String getPassword() { return user.getPassword(); } - //UUID -> User @Override public String getUsername() { - return user.getUuid().toString(); + return user.getEmail(); } @Override diff --git a/src/main/java/com/oauth2/config/auth/token/CustomTokenEnhancer.java b/src/main/java/com/oauth2/config/auth/token/CustomTokenEnhancer.java new file mode 100644 index 0000000..2da2930 --- /dev/null +++ b/src/main/java/com/oauth2/config/auth/token/CustomTokenEnhancer.java @@ -0,0 +1,27 @@ +package com.oauth2.config.auth.token; + +import java.util.HashMap; +import java.util.Map; + +import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken; +import org.springframework.security.oauth2.common.OAuth2AccessToken; +import org.springframework.security.oauth2.provider.OAuth2Authentication; +import org.springframework.security.oauth2.provider.token.TokenEnhancer; + +import com.oauth2.config.auth.UserPrincipal; + +public class CustomTokenEnhancer implements TokenEnhancer{ + + @Override + public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) { + + UserPrincipal userAuth = (UserPrincipal) authentication.getPrincipal(); + + Map addInfo = new HashMap<>(); + addInfo.put("user_uuid", userAuth.getUser().getUuid()); + + ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(addInfo); + return accessToken; + } + +} diff --git a/src/main/java/com/oauth2/controllers/AuthController.java b/src/main/java/com/oauth2/controllers/AuthController.java index 459047c..1725113 100644 --- a/src/main/java/com/oauth2/controllers/AuthController.java +++ b/src/main/java/com/oauth2/controllers/AuthController.java @@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.RestController; import com.oauth2.entities.User; -import com.oauth2.models.dto.auth.AuthUserRoleAndAuthoritiesDTO; +import com.oauth2.models.dto.auth.AuthUserAndRolesAndAuthoritiesDTO; import com.oauth2.services.IUserService; import io.swagger.annotations.Api; @@ -30,14 +30,14 @@ public class AuthController { private IUserService userService; @GetMapping(value = "/authorities/{uuid}", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity getAuthorities(@PathVariable String uuid){ + public ResponseEntity getAuthorities(@PathVariable String uuid){ try { UUID uuid_user = UUID.fromString(uuid.toString()); User user = userService.findByUuid(uuid_user) .orElseThrow(() -> new UsernameNotFoundException("Error -> hasPermission for UUID: " + uuid_user)); - return ResponseEntity.ok(new AuthUserRoleAndAuthoritiesDTO(user)); + return ResponseEntity.ok(new AuthUserAndRolesAndAuthoritiesDTO(user)); } catch (IllegalArgumentException ie) { log.error("Error method getAuthorities in class AuthController: "+ie.getMessage()); return ResponseEntity.badRequest().build();//400 diff --git a/src/main/java/com/oauth2/models/dto/auth/AuthUserRoleAndAuthoritiesDTO.java b/src/main/java/com/oauth2/models/dto/auth/AuthUserAndRolesAndAuthoritiesDTO.java similarity index 72% rename from src/main/java/com/oauth2/models/dto/auth/AuthUserRoleAndAuthoritiesDTO.java rename to src/main/java/com/oauth2/models/dto/auth/AuthUserAndRolesAndAuthoritiesDTO.java index 806e17a..c58685d 100644 --- a/src/main/java/com/oauth2/models/dto/auth/AuthUserRoleAndAuthoritiesDTO.java +++ b/src/main/java/com/oauth2/models/dto/auth/AuthUserAndRolesAndAuthoritiesDTO.java @@ -13,13 +13,17 @@ @AllArgsConstructor @NoArgsConstructor @Data -public class AuthUserRoleAndAuthoritiesDTO { +public class AuthUserAndRolesAndAuthoritiesDTO { private String uuid; + private String name; + private String email; private List roles; - public AuthUserRoleAndAuthoritiesDTO(User user) { + public AuthUserAndRolesAndAuthoritiesDTO(User user) { this.uuid = user.getUuid().toString(); + this.name = user.getName(); + this.email = user.getEmail(); this.roles = new ArrayList<>(); this.roles.addAll(user.getRoles().stream() .map(AuthRolesDTO::new) diff --git a/src/main/java/com/oauth2/utils/GeneratorPassword.java b/src/main/java/com/oauth2/utils/GeneratorPassword.java new file mode 100644 index 0000000..ebb300f --- /dev/null +++ b/src/main/java/com/oauth2/utils/GeneratorPassword.java @@ -0,0 +1,10 @@ +package com.oauth2.utils; + +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + +public class GeneratorPassword { + public static void main(String[] args) { + BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); + System.out.println(encoder.encode("secretProjectExampleOAuth2Security")); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 4868f4d..978e120 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -42,7 +42,7 @@ jwt: clientId: ProjectExampleOAuth2Security client-secret: secretProjectExampleOAuth2Security accessTokenValidititySeconds: 43200 - authorizedGrantTypes: password,authorization_code,refresh_token + authorizedGrantTypes: password,refresh_token refreshTokenValiditySeconds: 2592000 server: