Wie erhalte ich ein Token für die DFS-Kerberos-Authentifizierung erforderlich?
-
26-09-2019 - |
Frage
Ich versuche, einen Client für das Konsumieren von DFS (Documentum Foundation Services) zu schreiben und zu versuchen, die Verwendung von Kerberos für Single Sign-On. Sowohl Java und C # Beispielcode (Produktivität Schicht) in der Dokumentation gibt die folgende Zeile, die die Kerberos erhält binäre Token:
byte [] Ticket = ...
Ich bin nicht sicher, wie man tatsächlich bekommen die binäre Token und die „...“ hilft mir nicht. Wer weiß, wie ein tatsächliches Ticket (Kerberos-Token) unter Verwendung von Java oder C # zu bekommen?
Hier sind die angegebenen Beispiele sowohl für Java und C #:
Java: Das Aufrufen eines Dienstes mit der Kerberos-Authentifizierung
KerberosTokenHandler handler = new KerberosTokenHandler();
IObjectService service = ServiceFactory
.getInstance().getRemoteService(..., contextRoot, Arrays.asList((Handler) handler));
byte[] ticket = ...;
handler.setBinarySecurityToken(
new KerberosBinarySecurityToken(ticket, KerberosValueType.KERBEROSV5_AP_REQ));
service.create(...)
C #: einen Dienst mit Kerberos-Authentifizierung aufrufen
KerberosTokenHandler handler = new KerberosTokenHandler();
List<IEndpointBehavior> handlers = new List<IEndpointBehavior>();
handlers.Add(handler);
IObjectService service = ServiceFactory
.Instance.GetRemoteService<IObjectService>(..., contextRoot, handlers);
byte[] ticket = ...;
handler.SetBinarySecurityToken(
new KerberosBinarySecurityToken(ticket, KerberosValueType.GSS_KERBEROSV5_AP_REQ));
service.create(...);
Lösung
Ich dachte nur diese aus für .NET und würde für diejenigen zu teilen möchten, die vielleicht interessiert. Was benötigt wird, ist WSE3 Bibliothek. Stellen Sie sicher, dass die DFS-Dienstkonto für Kerberos-Delegierung konfigurieren.
Also, was tun müssen, ist Ihre KerberosTokenHandler mit dem Kerberos-Token gesetzt. Die KerberosBinarySecurityToken stammt aus WSE3. Der Code würde wie folgt aussehen:
KerberosTokenHandler kerberosTokenHandler = new KerberosTokenHandler();
String servicePrincipalName = “DFS/example66”; // this is the service principal name for your DFS service account in Active Directory.
using (KerberosClientContext kerberosClientContext = new KerberosClientContext(servicePrincipalName, true, ImpersonationLevel.Delegation))
{
KerberosBinarySecurityToken token = new KerberosBinarySecurityToken(kerberosClientContext.InitializeContext(), KerberosValueType.KERBEROSV5_AP_REQ);
kerberosTokenHandlerandler.SetBinarySecurityToken(token);
}