@Test @OAuth2ContextConfiguration( resource = OAuth2ContextConfiguration.Implicit.class, initialize = false) public void testUserMustSupplyOldPassword() throws Exception { MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>(); parameters.set("source", "credentials"); parameters.set("username", joe.getUserName()); parameters.set("password", "pas5Word"); context.getAccessTokenRequest().putAll(parameters); PasswordChangeRequest change = new PasswordChangeRequest(); change.setPassword("Newpasswo3d"); HttpHeaders headers = new HttpHeaders(); ResponseEntity<Void> result = client.exchange( serverRunning.getUrl(userEndpoint) + "/{id}/password", HttpMethod.PUT, new HttpEntity<>(change, headers), Void.class, joe.getId()); assertEquals(HttpStatus.BAD_REQUEST, result.getStatusCode()); }
@Test @OAuth2ContextConfiguration( resource = OAuth2ContextConfiguration.ClientCredentials.class, initialize = false) public void testUserAccountGetsUnlockedAfterPasswordChange() throws Exception { HttpHeaders headers = new HttpHeaders(); headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); headers.set("Authorization", testAccounts.getAuthorizationHeader("app", "appclientsecret")); MultiValueMap<String, String> data = new LinkedMultiValueMap<String, String>(); data.put("grant_type", Collections.singletonList("password")); data.put("username", Collections.singletonList(joe.getUserName())); data.put("password", Collections.singletonList("pas5Word")); ResponseEntity<Map> result = serverRunning.postForMap( serverRunning.buildUri("/oauth/token").build().toString(), data, headers); assertEquals(HttpStatus.OK, result.getStatusCode()); // Lock out the account data.put("password", Collections.singletonList("randomPassword1")); for (int i = 0; i < 5; i++) { result = serverRunning.postForMap( serverRunning.buildUri("/oauth/token").build().toString(), data, headers); assertEquals(HttpStatus.UNAUTHORIZED, result.getStatusCode()); } // Check that it is locked result = serverRunning.postForMap( serverRunning.buildUri("/oauth/token").build().toString(), data, headers); assertEquals("Login policy rejected authentication", result.getBody().get("error_description")); assertEquals(HttpStatus.UNAUTHORIZED, result.getStatusCode()); PasswordChangeRequest change = new PasswordChangeRequest(); change.setPassword("Newpasswo3d"); MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>(); parameters.set("grant_type", "client_credentials"); parameters.set("username", "admin"); parameters.set("password", "adminsecret"); context.getAccessTokenRequest().putAll(parameters); // Change the password HttpHeaders passwordChangeHeaders = new HttpHeaders(); ResponseEntity<Void> passwordChangeResult = client.exchange( serverRunning.getUrl(userEndpoint) + "/{id}/password", HttpMethod.PUT, new HttpEntity<>(change, passwordChangeHeaders), Void.class, joe.getId()); assertEquals(HttpStatus.OK, passwordChangeResult.getStatusCode()); MultiValueMap<String, String> newData = new LinkedMultiValueMap<String, String>(); newData.put("grant_type", Collections.singletonList("password")); newData.put("username", Collections.singletonList(joe.getUserName())); newData.put("password", Collections.singletonList("Newpasswo3d")); ResponseEntity<Map> updatedResult = serverRunning.postForMap( serverRunning.buildUri("/oauth/token").build().toString(), newData, headers); assertEquals(HttpStatus.OK, updatedResult.getStatusCode()); }