Example usage for org.springframework.security.oauth2.provider.token DefaultUserAuthenticationConverter DefaultUserAuthenticationConverter

List of usage examples for org.springframework.security.oauth2.provider.token DefaultUserAuthenticationConverter DefaultUserAuthenticationConverter

Introduction

In this page you can find the example usage for org.springframework.security.oauth2.provider.token DefaultUserAuthenticationConverter DefaultUserAuthenticationConverter.

Prototype

DefaultUserAuthenticationConverter

Source Link

Usage

From source file:org.cloudfoundry.identity.uaa.integration.CheckTokenEndpointIntegrationTests.java

@Test
public void testDecodeToken() {
    AuthorizationCodeResourceDetails resource = testAccounts.getDefaultAuthorizationCodeResource();
    BasicCookieStore cookies = new BasicCookieStore();

    URI uri = serverRunning.buildUri("/oauth/authorize").queryParam("response_type", "code")
            .queryParam("state", "mystateid").queryParam("client_id", resource.getClientId())
            .queryParam("redirect_uri", resource.getPreEstablishedRedirectUri()).build();
    ResponseEntity<Void> result = serverRunning.getForResponse(uri.toString(), getHeaders(cookies));
    assertEquals(HttpStatus.FOUND, result.getStatusCode());
    String location = result.getHeaders().getLocation().toString();

    if (result.getHeaders().containsKey("Set-Cookie")) {
        for (String cookie : result.getHeaders().get("Set-Cookie")) {
            int nameLength = cookie.indexOf('=');
            cookies.addCookie(/* ww w  . ja  va 2 s  .c  o m*/
                    new BasicClientCookie(cookie.substring(0, nameLength), cookie.substring(nameLength + 1)));
        }
    }

    ResponseEntity<String> response = serverRunning.getForString(location, getHeaders(cookies));

    if (response.getHeaders().containsKey("Set-Cookie")) {
        for (String cookie : response.getHeaders().get("Set-Cookie")) {
            int nameLength = cookie.indexOf('=');
            cookies.addCookie(
                    new BasicClientCookie(cookie.substring(0, nameLength), cookie.substring(nameLength + 1)));
        }
    }
    // should be directed to the login screen...
    assertTrue(response.getBody().contains("/login.do"));
    assertTrue(response.getBody().contains("username"));
    assertTrue(response.getBody().contains("password"));
    String csrf = IntegrationTestUtils.extractCookieCsrf(response.getBody());

    MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();
    formData.add("username", testAccounts.getUserName());
    formData.add("password", testAccounts.getPassword());
    formData.add(DEFAULT_CSRF_COOKIE_NAME, csrf);

    // Should be redirected to the original URL, but now authenticated
    result = serverRunning.postForResponse("/login.do", getHeaders(cookies), formData);
    assertEquals(HttpStatus.FOUND, result.getStatusCode());

    if (result.getHeaders().containsKey("Set-Cookie")) {
        for (String cookie : result.getHeaders().get("Set-Cookie")) {
            int nameLength = cookie.indexOf('=');
            cookies.addCookie(
                    new BasicClientCookie(cookie.substring(0, nameLength), cookie.substring(nameLength + 1)));
        }
    }

    response = serverRunning.getForString(result.getHeaders().getLocation().toString(), getHeaders(cookies));
    if (response.getHeaders().containsKey("Set-Cookie")) {
        for (String cookie : response.getHeaders().get("Set-Cookie")) {
            int nameLength = cookie.indexOf('=');
            cookies.addCookie(
                    new BasicClientCookie(cookie.substring(0, nameLength), cookie.substring(nameLength + 1)));
        }
    }
    if (response.getStatusCode() == HttpStatus.OK) {
        // The grant access page should be returned
        assertTrue(response.getBody().contains("<h1>Application Authorization</h1>"));

        formData.clear();
        formData.add(DEFAULT_CSRF_COOKIE_NAME, IntegrationTestUtils.extractCookieCsrf(response.getBody()));
        formData.add(USER_OAUTH_APPROVAL, "true");
        result = serverRunning.postForResponse("/oauth/authorize", getHeaders(cookies), formData);
        assertEquals(HttpStatus.FOUND, result.getStatusCode());
        location = result.getHeaders().getLocation().toString();
    } else {
        // Token cached so no need for second approval
        assertEquals(HttpStatus.FOUND, response.getStatusCode());
        location = response.getHeaders().getLocation().toString();
    }
    assertTrue("Wrong location: " + location,
            location.matches(resource.getPreEstablishedRedirectUri() + ".*code=.+"));

    formData.clear();
    formData.add("client_id", resource.getClientId());
    formData.add("redirect_uri", resource.getPreEstablishedRedirectUri());
    formData.add("grant_type", GRANT_TYPE_AUTHORIZATION_CODE);
    formData.add("code", location.split("code=")[1].split("&")[0]);
    HttpHeaders tokenHeaders = new HttpHeaders();
    tokenHeaders.set("Authorization",
            testAccounts.getAuthorizationHeader(resource.getClientId(), resource.getClientSecret()));
    @SuppressWarnings("rawtypes")
    ResponseEntity<Map> tokenResponse = serverRunning.postForMap("/oauth/token", formData, tokenHeaders);
    assertEquals(HttpStatus.OK, tokenResponse.getStatusCode());

    @SuppressWarnings("unchecked")
    OAuth2AccessToken accessToken = DefaultOAuth2AccessToken.valueOf(tokenResponse.getBody());

    HttpHeaders headers = new HttpHeaders();
    formData = new LinkedMultiValueMap<String, String>();
    headers.set("Authorization",
            testAccounts.getAuthorizationHeader(resource.getClientId(), resource.getClientSecret()));
    formData.add("token", accessToken.getValue());

    tokenResponse = serverRunning.postForMap("/check_token", formData, headers);
    assertEquals(HttpStatus.OK, tokenResponse.getStatusCode());

    @SuppressWarnings("unchecked")
    Map<String, String> map = tokenResponse.getBody();
    assertNotNull(map.get("iss"));
    assertEquals(testAccounts.getUserName(), map.get("user_name"));
    assertEquals(testAccounts.getEmail(), map.get("email"));

    // Test that Spring's default converter can create an auth from the response.
    Authentication auth = (new DefaultUserAuthenticationConverter()).extractAuthentication(map);
}