in aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsHttpApiV2SecurityContext.java [44:74]
public Principal getUserPrincipal() {
if (getAuthenticationScheme() == null || !event.getHeaders().containsKey(HttpHeaders.AUTHORIZATION)) {
return null;
}
String authValue = event.getHeaders().get(HttpHeaders.AUTHORIZATION);
if (authValue.startsWith("Bearer ")) {
authValue = authValue.replace("Bearer ", "");
}
String[] parts = authValue.split("\\.");
if (parts.length != 3) {
log.warn("Could not parse JWT token for requestId: " + SecurityUtils.crlf(event.getRequestContext().getRequestId()));
return null;
}
String decodedBody = new String(Base64.getMimeDecoder().decode(parts[1]), StandardCharsets.UTF_8);
try {
JsonNode parsedBody = LambdaContainerHandler.getObjectMapper().readTree(decodedBody);
if (!parsedBody.isObject() && parsedBody.has("sub")) {
log.debug("Could not find \"sub\" field in JWT body for requestId: " + SecurityUtils.crlf(event.getRequestContext().getRequestId()));
return null;
}
String subject = parsedBody.get("sub").asText();
return (() -> {
return subject;
});
} catch (JsonProcessingException e) {
log.error("Error while attempting to parse JWT body for requestId: " + SecurityUtils.crlf(event.getRequestContext().getRequestId()), e);
return null;
}
}