Ich habe eine funktionierende Anwendung zur Verwaltung von HDFS mit WebHDFS. Ich muss dies auf einem Kerberos-gesicherten Cluster tun können.Zugriff auf kerberos gesichert WebHDFS ohne SPnego
Das Problem ist, dass es keine Bibliothek oder Erweiterung gibt, um das Ticket für meine App zu verhandeln, ich habe nur einen einfachen HTTP-Client.
Wäre es möglich, einen Java-Service zu erstellen, der den Ticketaustausch abwickelt und das Serviceticket einfach an die App zur Verwendung in einer HTTP-Anforderung weiterleitet? Mit anderen Worten, meine App würde den Java-Dienst bitten, die Tickets zu verhandeln, und es würde das Service-Ticket in einer Zeichenfolge oder einer unbearbeiteten Zeichenfolge zurück an meine App senden und die App würde es einfach an die HTTP-Anfrage anhängen?
EDIT: Gibt es eine ähnlich elegante Lösung wie @SamsonScharfrichter für HTTPfs beschrieben? (Nach meinem Wissen, es unterstützt keine Delegation Tokens)
EDIT2: Hallo Leute, ich bin immer noch völlig verloren. Ich versuche, den Hadoop-Auth-Client ohne Glück herauszufinden. Könnten Sie mir bitte wieder helfen? Ich habe schon Stunden damit verbracht, ohne Glück darüber zu lesen. Die Beispiele sagen, dies zu tun:
* // establishing an initial connection
*
* URL url = new URL("http://foo:8080/bar");
* AuthenticatedURL.Token token = new AuthenticatedURL.Token();
* AuthenticatedURL aUrl = new AuthenticatedURL();
* HttpURLConnection conn = new AuthenticatedURL(url, token).openConnection();
* ....
* // use the 'conn' instance
* ....
Im bereits hier verloren. Welche erste Verbindung brauche ich? Wie kann
new AuthenticatedURL(url, token).openConnection();
nehmen Sie zwei Parameter? Für einen solchen Fall gibt es keinen Konstruktor. (Ich bekomme deswegen einen Fehler). Sollte ein Auftraggeber nicht irgendwo angegeben sein? Es wird wahrscheinlich nicht so einfach sein.
URL url = new URL("http://<host>:14000/webhdfs/v1/?op=liststatus");
AuthenticatedURL.Token token = new AuthenticatedURL.Token();
HttpURLConnection conn = new AuthenticatedURL(url, token).openConnection(url, token);
Ich denke, es könnte möglich sein, das zu tun, aber es öffnet nur die Sicherheitslücke, die Kerberos geschlossen hat. Ich glaube, Knox/Sentry erlaubt Ihnen den Zugriff auf Daten über einige API-Punkte, nein? –
Danke für einen Hinweis, aber ich kann nicht Knox verwenden, wenn es öffnet, ist das Sicherheitsloch für eine Diskussion, sobald es funktioniert. – MaBu
AFAIK alle Hadoop GUIs und REST-Dienste verwenden ein ** signiertes Cookie **, um die Kerberos-Anmeldeinformationen zwischenzuspeichern - mit Ausnahme von WebHDFS, für das das Delegierungstoken explizit verwaltet werden muss. Vielleicht ist es möglich, den Cookie mit einer HTTP-Bibliothek zu erstellen und ihn dann mit einer anderen Sitzung zu verwenden. Sie sollten versuchen, eine "Debug-Modus" -Verbindung mit HttpFS auszuführen, um zu prüfen, ob ein Cookie beteiligt ist. Und hoffentlich ist Ihr "einfacher HTTP-Client" nicht zu einfach und lässt Sie an Cookies basteln. –