package toyotaoauth; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Base64; import java.util.Map; import org.apache.commons.io.IOUtils; import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpRequestRetryHandler; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; import org.apache.log4j.Logger; import org.json.JSONException; import com.fasterxml.jackson.databind.ObjectMapper; import sailpoint.tools.GeneralException; public class OAuthClientSOP { private static final Logger log = Logger.getLogger(OAuthClientSOP.class); public static void main(String[] args) { // TODO Auto-generated method stub try { System.out.println("Result="+invokeGetEndPoint() ); } catch (GeneralException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static String getAccessToken() throws GeneralException, JSONException, UnsupportedEncodingException, IOException { System.out.println("Start getAccessToken"); String encodedHttpResponse = null; HttpClient httpClient = HttpClientBuilder.create().setRetryHandler(new DefaultHttpRequestRetryHandler(3, true)) .build(); HttpPost httpPost = new HttpPost("http://localhost:8080/identityiq/oauth2/token"); HttpResponse httpResponse = null; StringEntity input = null; String inputstring = "client_id=" + "UnkwvXRqUOMj3X4GXSuh1nqfOoomRIwT" + "&client_secret=" + "lCaksOZKYnLoLgZ7" + "&grant_type=" + "client_credentials"; input = new StringEntity(inputstring); httpPost.setEntity(input); String content = EntityUtils.toString(input); httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded"); //httpPost.addHeader("Content-Type", "application/json"); //httpPost.addHeader("Accept", "application/json"); httpPost.addHeader("Authorization", "Basic "+Base64.getEncoder().encodeToString(new String("UnkwvXRqUOMj3X4GXSuh1nqfOoomRIwT:lCaksOZKYnLoLgZ7").getBytes()) ); Header[] headers = httpPost.getAllHeaders(); System.out.println("http post Request= " + httpPost.toString()); System.out.println("http Post Headers: "); for (Header header : headers) { System.out.println(header.getName() + ":" + header.getValue()); } System.out.println("Post Body= " + content); httpResponse = httpClient.execute(httpPost); if (httpResponse != null) { System.out.println(" httpResponse= " + httpResponse); int statusCode = httpResponse.getStatusLine().getStatusCode(); System.out.println("StatusLine=" + httpResponse.getStatusLine()); System.out.println("StatusCode=" + statusCode); if (httpResponse != null && statusCode == 200) { HttpEntity resEntity = httpResponse.getEntity(); System.out.println("resEntity=" + resEntity); if (resEntity != null) { encodedHttpResponse = IOUtils.toString(httpResponse.getEntity().getContent(), "UTF-8"); System.out.println("Http Response status is " + statusCode + " responseString=" + encodedHttpResponse); return encodedHttpResponse; } } else { System.out.println("Bad Http Response " + encodedHttpResponse); } } else { System.out.println("Access Tocken Http Response is NULL for " + input); } System.out.println("End getAccessToken"); return encodedHttpResponse; } private static String invokeGetEndPoint() throws GeneralException, JSONException, UnsupportedEncodingException, IOException { System.out.println("Start getAccessToken"); String encodedHttpResponse = null; HttpClient httpClient = HttpClientBuilder.create().setRetryHandler(new DefaultHttpRequestRetryHandler(3, true)) .build(); // Scenario: 401 without SCIMExecutor Capability //HttpGet httpGet = new HttpGet("http://localhost:8080/identityiq/scim/v2/Applications/c0a8568d76851514817685f79c3e000b"); //Scenario: Required Capability is UserListResourceExtendedSCIMExecutor HttpGet httpGet = new HttpGet("http://localhost:8080/identityiq/plugin/rest/RESTSCIMExtension/users"); HttpResponse httpResponse = null; // httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded"); httpGet.addHeader("Content-Type", "application/json"); //httpPost.addHeader("Accept", "application/json"); String oauthTokenResponse = getAccessToken(); System.out.println("The value of oauthTokenResponse is " + oauthTokenResponse); if (oauthTokenResponse == null) { System.out.println("oauthTokenResponse is invalid. " + oauthTokenResponse); return null; } ObjectMapper mapper = new ObjectMapper(); Map jsonResponseMap = mapper.readValue(oauthTokenResponse, Map.class); System.out.println("oauthTokenResponse json map value=" + jsonResponseMap); String bearerToken = null; if (jsonResponseMap != null) { String tokenType = (String) jsonResponseMap.get("token_type"); System.out.println("jsonResponseMap tokenType" + tokenType); String accessToken = (String) jsonResponseMap.get("access_token"); //System.out.println("jsonResponseMap accessToken" + accessToken); String expiresIn = String.valueOf(jsonResponseMap.get("expires_in")); System.out.println("jsonResponseMap expiresIn" + expiresIn); if (accessToken != null) bearerToken = accessToken; System.out.println("token_type : '" + tokenType + "'."); System.out.println("expires_in : '" + expiresIn); System.out.println("access_token : " + accessToken + "\n"); } httpGet.addHeader("Authorization", "Bearer " + bearerToken); Header[] headers = httpGet.getAllHeaders(); System.out.println("http post Request= " + httpGet.toString()); System.out.println("http Post Headers: "); for (Header header : headers) { System.out.println(header.getName() + ":" + header.getValue()); } httpResponse = httpClient.execute(httpGet); if (httpResponse != null) { System.out.println(" httpResponse= " + httpResponse); int statusCode = httpResponse.getStatusLine().getStatusCode(); System.out.println("StatusLine=" + httpResponse.getStatusLine()); System.out.println("StatusCode=" + statusCode); if (httpResponse != null && statusCode == 200) { HttpEntity resEntity = httpResponse.getEntity(); System.out.println("resEntity=" + resEntity); if (resEntity != null) { encodedHttpResponse = IOUtils.toString(httpResponse.getEntity().getContent(), "UTF-8"); System.out.println("Http Response status is " + statusCode + " responseString=" + encodedHttpResponse); return encodedHttpResponse; } } else { System.out.println("Bad Http Response " + encodedHttpResponse); } } else { System.out.println("Http Response is NULL"); } System.out.println("End getAccessToken"); return encodedHttpResponse; } }