ich einige einfache HTTP-Authentifizierung mache und bin immer einJava: holen URL mit Httpbasic Authentication
java.lang.IllegalArgumentException: Illegal character(s) in message header value: Basic OGU0ZTc5ODBk(...trimmed from 76 chars...)
(...more password data...)
die ich denke, ist auf mich einen wirklich langen Benutzernamen und Passwort mit und der Encoder wickelt es mit einem \n
bei 76 Zeichen. Kann ich das irgendwie umgehen? Die URL unterstützt nur HTTP Basic Auth.
Hier ist mein Code:
private class UserPassAuthenticator extends Authenticator {
String user;
String pass;
public UserPassAuthenticator(String user, String pass) {
this.user = user;
this.pass = pass;
}
// This method is called when a password-protected URL is accessed
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, pass.toCharArray());
}
}
private String fetch(StoreAccount account, String path) throws IOException {
Authenticator.setDefault(new UserPassAuthenticator(account.getCredentials().getLogin(), account.getCredentials().getPassword()));
URL url = new URL("https", account.getStoreUrl().replace("http://", ""), path);
System.out.println(url);
URLConnection urlConn = url.openConnection();
Object o = urlConn.getContent();
if (!(o instanceof String))
throw new IOException("Wrong Content-Type on " + url.toString());
// Remove the authenticator back to the default
Authenticator.setDefault(null);
return (String) o;
}
Ein Sicherheitshinweis „Authorization“, „Basic“ + codiert sollte sein: wenn über HTTP Verwendung Benutzername und Passwort, die beide Dinge werden als klare Zeichenfolge gesendet. Es ist besser, verschiedene Authentifizierung (Formular, POST) und Transportprotokoll (HTTPS, H2) zu verwenden. – tfb785