use of com.microsoft.azure.oidc.common.timestamp.TimeStamp in project azure-tools-for-java by Microsoft.
the class SimpeTokenParser method getToken.
@Override
public Token getToken(String value) {
final String[] parts = value.split("\\.");
if (parts.length != 3) {
throw new IllegalStateException(String.format("Incorrect number of parts: Expected 3 got %s", parts.length));
}
final JsonNode header = parsePart(decodePart(parts[0]));
final JsonNode body = parsePart(decodePart(parts[1]));
final Name keyName = getKeyName(header);
final Algorithm algorithm = getAlgorithm(header);
final TimeStamp issuedAt = getIssuedAt(body);
final TimeStamp notBefore = getNotBefore(body);
final TimeStamp expiration = getExpiration(body);
final Issuer issuer = getIssuer(body);
final ID audience = getAudience(body);
final ID userID = getUserID(body);
final List<Email> userEmails = getEmails(body);
final Payload payload = getPayload(parts[0], parts[1]);
final Signature signature = getSignature(parts[2]);
return tokenFactory.createToken(keyName, algorithm, issuedAt, notBefore, expiration, userID, userEmails, issuer, audience, payload, signature);
}
use of com.microsoft.azure.oidc.common.timestamp.TimeStamp in project azure-tools-for-java by Microsoft.
the class SimpleKeyStoreParser method getKeys.
@Override
public Map<Name, Key> getKeys(final JsonNode node) {
if (node == null) {
throw new PreconditionException("Required parameter is null");
}
final Map<Name, Key> keys = new HashMap<Name, Key>();
for (final JsonNode n : node.get("keys")) {
final TimeStamp notBefore = timeStampFactory.createTimeStamp(n.has("nbf") ? n.get("nbf").asLong() : 0L);
final Name keyName = nameFactory.createKeyName(n.get("kid").asText());
final Modulus modulus = modulusFactory.createKeyValue(n.get("n").asText());
final Exponent exponent = exponentFactory.createKeyExponent(n.get("e").asText());
final Key key = keyFactory.createKey(notBefore, modulus, exponent);
keys.put(keyName, key);
}
return keys;
}
use of com.microsoft.azure.oidc.common.timestamp.TimeStamp in project azure-tools-for-java by Microsoft.
the class SimpleTokenValidator method validateSignature.
@Override
public Boolean validateSignature(final Token token) {
if (token == null) {
throw new PreconditionException("Required parameter is null");
}
if (algorithmConfigurationService.get().getAlgorithmClassMap().get(token.getAlgorithm().getName()).equals("HMAC")) {
return Boolean.FALSE;
}
final Configuration configuration = configurationCache.load();
if (configuration == null) {
throw new GeneralException("Error loading configuration");
}
try {
final TimeStamp now = timeStampFactory.createTimeStamp(System.currentTimeMillis() / 1000);
if (configuration.getKey(token.getKeyName()).getNotBefore().compareTo(now) > 0) {
return Boolean.FALSE;
}
final Base64 decoder = new Base64();
final BigInteger exponent = new BigInteger(1, decoder.decode(configuration.getKey(token.getKeyName()).getExponent().getValue()));
final BigInteger modulus = new BigInteger(1, decoder.decode(configuration.getKey(token.getKeyName()).getSecret().getValue()));
final RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(modulus, exponent);
final KeyFactory keyFactory = KeyFactory.getInstance(algorithmConfigurationService.get().getAlgorithmClassMap().get(token.getAlgorithm().getName()));
final PublicKey pubKey = keyFactory.generatePublic(pubKeySpec);
final Signature sig = Signature.getInstance(algorithmConfigurationService.get().getAlgorithmMap().get(token.getAlgorithm().getName()));
sig.initVerify(pubKey);
sig.update(token.getPayload().getValue().getBytes());
return sig.verify(decoder.decode(token.getSignature().getValue()));
} catch (NoSuchAlgorithmException | InvalidKeySpecException | SignatureException | InvalidKeyException e) {
LOGGER.error(e.getMessage(), e);
return Boolean.FALSE;
}
}
Aggregations