use of org.jose4j.json.internal.json_simple.parser.JSONParser in project java by kubernetes-client.
the class OpenIDConnectAuthenticator method refreshOidcToken.
/**
* Refreshes the OpenID Connect id_token
*
* @param clientId from client-id
* @param refreshToken from refresh-token
* @param clientSecret from client-secret
* @param sslContext to support TLS with a self signed certificate in
* idp-certificate-authority-data
* @param tokenURL the url for refreshing the token
* @return
*/
private JSONObject refreshOidcToken(String clientId, String refreshToken, String clientSecret, SSLContext sslContext, String tokenURL) {
try {
URL tokenEndpoint = new URL(tokenURL);
HttpsURLConnection https = (HttpsURLConnection) tokenEndpoint.openConnection();
https.setRequestMethod("POST");
if (sslContext != null) {
https.setSSLSocketFactory(sslContext.getSocketFactory());
}
// per https://tools.ietf.org/html/rfc6749#section-2.3 the secret should be a header,
// not in
// the body
String credentials = Base64.getEncoder().encodeToString(new StringBuilder().append(clientId).append(':').append(clientSecret).toString().getBytes(StandardCharsets.UTF_8));
https.setRequestProperty("Authorization", new StringBuilder().append("Basic ").append(credentials).toString());
https.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
https.setDoOutput(true);
String urlData = new StringBuilder().append("refresh_token=").append(URLEncoder.encode(refreshToken, "UTF-8")).append("&grant_type=refresh_token").toString();
OutputStream ou = https.getOutputStream();
ou.write(urlData.getBytes(StandardCharsets.UTF_8));
ou.flush();
ou.close();
int code = https.getResponseCode();
if (code != HttpsURLConnection.HTTP_OK) {
throw new RuntimeException(new StringBuilder().append("Invalid response code for token retrieval - ").append(code).toString());
}
Scanner scanner = new Scanner(https.getInputStream(), StandardCharsets.UTF_8.name());
String json = scanner.useDelimiter("\\A").next();
return (JSONObject) new JSONParser().parse(json);
} catch (Throwable t) {
throw new RuntimeException("Could not refresh token", t);
}
}
use of org.jose4j.json.internal.json_simple.parser.JSONParser in project java by kubernetes-client.
the class OpenIDConnectAuthenticator method loadTokenURL.
/**
* Determines the token url
*
* @param issuer from the idp-issuer-url
* @param sslContext to support TLS with a self signed certificate in
* idp-certificate-authority-data
* @return
*/
private String loadTokenURL(String issuer, SSLContext sslContext) {
StringBuilder wellKnownUrl = new StringBuilder();
wellKnownUrl.append(issuer);
if (!issuer.endsWith("/")) {
wellKnownUrl.append("/");
}
wellKnownUrl.append(".well-known/openid-configuration");
try {
URL wellKnown = new URL(wellKnownUrl.toString());
HttpsURLConnection https = (HttpsURLConnection) wellKnown.openConnection();
https.setRequestMethod("GET");
if (sslContext != null) {
https.setSSLSocketFactory(sslContext.getSocketFactory());
}
https.setUseCaches(false);
int code = https.getResponseCode();
if (code != HttpsURLConnection.HTTP_OK) {
throw new RuntimeException(new StringBuilder().append("Invalid response code for issuer - ").append(code).toString());
}
Scanner scanner = new Scanner(https.getInputStream(), StandardCharsets.UTF_8.name());
String json = scanner.useDelimiter("\\A").next();
JSONObject wellKnownJson = (JSONObject) new JSONParser().parse(json);
return (String) wellKnownJson.get("token_endpoint");
} catch (IOException | ParseException e) {
throw new RuntimeException("Could not refresh", e);
}
}
use of org.jose4j.json.internal.json_simple.parser.JSONParser in project open-ecard by ecsec.
the class VersionUpdateLoader method loadVersionUpdateList.
public VersionUpdateList loadVersionUpdateList() throws IllegalArgumentException {
try {
// load proxy if one is available
// make sure it is initialized
ProxySettings.getDefault();
List<Proxy> proxies = ProxySelector.getDefault().select(updateUrl.toURI());
Proxy p = Proxy.NO_PROXY;
for (Proxy next : proxies) {
if (next.type() != Proxy.Type.DIRECT) {
LOG.debug("Found a proxy for the update connection.");
p = next;
break;
}
}
LOG.info("Trying to load version list.");
URLConnection con = updateUrl.openConnection(p);
con.connect();
InputStream in = con.getInputStream();
Reader r = new InputStreamReader(in, StandardCharsets.UTF_8);
JSONObject rootObj = (JSONObject) new JSONParser().parse(r);
// get package specific download page
String downloadPageString = (String) rootObj.get(pkgType + "_download_page");
// access package specific list
JSONArray updatesRaw = (JSONArray) rootObj.get(pkgType);
ArrayList<VersionUpdate> updates = new ArrayList<>();
for (Object ur : updatesRaw) {
try {
VersionUpdate next = VersionUpdate.fromJson((JSONObject) ur);
updates.add(next);
} catch (InvalidUpdateDefinition ex) {
LOG.warn("Invalid version info contained in update list.", ex);
throw new IllegalArgumentException("Invalid version info contained in update list.", ex);
}
}
// make sure the versions are in the correct order
Collections.sort(updates);
VersionUpdateList list = new VersionUpdateList(updates, new URL(downloadPageString));
LOG.info("Successfully retrieved version update list.");
return list;
} catch (IOException ex) {
LOG.error("Failed to retrieve update list from server.", ex);
throw new IllegalArgumentException("Failed to retrieve update list from server.", ex);
} catch (NullPointerException ex) {
LOG.warn("Package type {} not supported in update list.", pkgType);
throw new IllegalArgumentException("Package type " + pkgType + " not supported in update list.", ex);
} catch (URISyntaxException ex) {
String msg = "Failed to convert Update URL to a URI.";
LOG.error(msg, ex);
throw new IllegalArgumentException(msg, ex);
} catch (ParseException ex) {
String msg = "Failed to deserialize JSON data.";
LOG.error(msg, ex);
throw new IllegalArgumentException(msg, ex);
}
}
Aggregations