in src/main/java/org/apache/sling/auth/core/impl/HttpBasicAuthenticationHandler.java [295:338]
protected AuthenticationInfo extractCredentials(HttpServletRequest request) {
// Return immediately if the header is missing
String authHeader = request.getHeader(HEADER_AUTHORIZATION);
if (authHeader == null || authHeader.length() == 0) {
return null;
}
// Get the authType (Basic, Digest) and authInfo (user/password) from
// the header
authHeader = authHeader.trim();
int blank = authHeader.indexOf(' ');
if (blank <= 0) {
return null;
}
String authType = authHeader.substring(0, blank);
String authInfo = authHeader.substring(blank).trim();
// Check whether authorization type matches
if (!authType.equalsIgnoreCase(AUTHENTICATION_SCHEME_BASIC)) {
return null;
}
// Base64 decode and split on colon
// we cannot use default base64, since we need iso encoding
// (nb: ISO-8859-1 is required as per API spec to be available)
byte[] encoded = authInfo.getBytes(StandardCharsets.ISO_8859_1);
byte[] bytes = Base64.decodeBase64(encoded);
String decoded = new String(bytes, StandardCharsets.ISO_8859_1);
final int colIdx = decoded.indexOf(':');
final String userId;
final char[] password;
if (colIdx < 0) {
userId = decoded;
password = new char[0];
} else {
userId = decoded.substring(0, colIdx);
password = decoded.substring(colIdx + 1).toCharArray();
}
return new AuthenticationInfo(HttpServletRequest.BASIC_AUTH, userId, password);
}