package com.amazonaws.blog.demo; import javax.net.ssl.HttpsURLConnection; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.io.StringWriter; import java.net.URL; import java.util.Base64; import java.util.regex.Matcher; import java.util.regex.Pattern; public class CognitoToken { private static final Pattern pat = Pattern.compile(".*\"access_token\"\\s*:\\s*\"([^\"]+)\".*"); public static String getNewCognitoToken() throws IOException { String content = "grant_type=client_credentials"; BufferedReader reader = null; HttpsURLConnection connection = null; String returnValue = ""; ConfigData configData = ConfigLoader.getConfigData(); String clientId= configData.getClientId(); String clientSecret=configData.getClientSecret(); String tokenUrl=configData.getTokenUrl(); String auth = clientId + ":" + clientSecret; String authentication = Base64.getEncoder().encodeToString(auth.getBytes()); try { URL url = new URL(tokenUrl); connection = (HttpsURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); connection.setRequestProperty("Authorization", "Basic " + authentication); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.setRequestProperty("Accept", "application/json"); PrintStream os = new PrintStream(connection.getOutputStream()); os.print(content); os.close(); reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line = null; StringWriter out = new StringWriter( connection.getContentLength() > 0 ? connection.getContentLength() : 2048); while ((line = reader.readLine()) != null) { out.append(line); } String response = out.toString(); Matcher matcher = pat.matcher(response); if (matcher.matches() && matcher.groupCount() > 0) { returnValue = matcher.group(1); } } catch (Exception e) { System.out.println("Error : " + e.getMessage()); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { } } connection.disconnect(); } return returnValue; } }