Lesen des Benutzernamens aus dem Kerberos-Ticket im Berechtigungsheader

8

Ich möchte den Namen des Benutzers aus dem Kerberos-Ticket im Autorisierungs-HTTP-Header lesen. Ich benutze Java.

Ich habe tagelang versucht, dies zu erreichen, indem ich eine Reihe von Seiten zu diesem Thema durchgelesen habe, aber das war nicht möglich. Kerberos ist neu / fremd für mich.

Das habe ich erreicht:

  • Wenn ein Benutzer zuerst auf die Site zugreift - ohne den Authorization-Header, antwortet der Server mit 401 + header: WWW-Authenticate = Negotiate.
  • Alle möglichen magischen Dinge passieren auf der Seite des Kunden.
  • Der Benutzer kehrt mit einer HTTP-Anfrage zurück, die den Authorization-Header mit einem Wert wie folgt enthält: "Negotiate YHcGB ... =="
  • Dekodiert das base64-kodierte Ticket in ein Byte-Array.

Ab hier ist es eine erschreckende Reise durch das Unbekannte. Soweit ich das beurteilen kann, sollten die nächsten Schritte sein:

  • Melden Sie sich mit einem Benutzer bei AD / Kerberos / Server an.
  • Dekodiere das Ticket.

Das habe ich:

login.conf

%Vor%

JavaClass.java

%Vor%

ServiceTicketDecoder.java

%Vor%

Der Login in JavaClass.java funktioniert ok, also gehe ich davon aus, dass die login.conf in Ordnung ist. Auf "GSSCredential serviceCredentials = gssManager.createCredential (..." im ServiceTicketDecoder.java wird die folgende Ausnahme ausgelöst:

%Vor%

Ich bin mir nicht sicher, ob dies der richtige Ansatz ist. Ich weiß auch nicht, welchen Wert der "String Service" haben soll oder wie man diese Informationen bekommt. Kannst du mir helfen?

BEARBEITEN: login.conf

%Vor%

Ich habe eine Keytab-Datei erhalten. Anscheinend war das Konto des HTTP / some.server.com-Benutzers bereits ein Service-Hauptkonto. Ich habe jetzt ein Problem auf JavaClass.java bei lc.login ():

%Vor%

Die Keytab-Datei ist mit des-cbc-md5 verschlüsselt und ich habe folgendes in der krb.conf-Datei definiert:

%Vor%

Wenn ich die Standard-EnkTypen z. aes128-cts, bekomme ich folgende Ausnahme:

%Vor%

Ich verstehe nicht was falsch ist ...

    
user1982861 16.01.2013, 08:53
quelle

2 Antworten

4

Kerberos ist ein vertrauenswürdiges Sicherheitssystem von Drittanbietern: Das Sicherheitstoken, das Sie vom Client erhalten, kann nur von Ihnen entschlüsselt werden, ohne Kerberos-Infrastrukturserver (wie das KDC) zu kontaktieren. Du bist auf dem richtigen Weg; Es scheint jedoch, dass Sie dieses Hintergrundwissen über Kerberos vermissen, um Sie bei Ihrer weiteren Recherche zu unterstützen.

Dies wird dadurch erreicht, dass Sie auf dem Server eine keytab -Datei benötigen, die den geheimen Schlüssel Ihres Servers enthält. Auf dem Kerberos-Server (ich vermute, Microsoft Windows Server) muss ein Service-Hauptkonto für Ihren Dienst erstellt werden. Ein Administrator kann Ihnen die für dieses Konto generierte Keytab-Datei bereitstellen, die den geheimen Schlüssel enthält.

Sie müssen dann den Server konfigurieren, um diese Chiffrierschlüsseldatei zu finden. Es wird im serverseitigen Schritt mit LoginContext.login verwendet. Ihr Code, der den Sicherheitskontext akzeptiert, muss innerhalb eines doPrivileged -Code-Segments ausgeführt werden, in dem Ihre serverseitigen Anmeldeinformationen wirksam sind.

    
Marko Topolnik 16.01.2013, 09:09
quelle
-2

Wenn Sie nur den Benutzernamen verwenden möchten, gibt es einen einfacheren Weg.

%Vor%

Ссылка Ссылка

    
keredson 04.06.2013 00:01
quelle

Tags und Links