2009-06-27 9 views
7

Esistono esempi che mostrano come Delphi invochi il server Kerberos di Active Directory per richiedere un ticket che concede ticket/ticket normali?Come posso ottenere un ticket Kerberos con Delphi?

Sfondo: il ticket è necessario per l'autenticazione a un servizio Web che scambia informazioni riservate.

Modifica: un breve esempio di codice sorgente sarebbe molto utile. Ho trovato il JEDI Windows Security Code Library che è molto impressionante. Non sono sicuro che contenga il supporto per Kerberos.

+1

vedere https://quality.embarcadero.com/browse/RSP-15455 – mjn

risposta

6

Secondo this dovresti riuscire a ottenerne uno con la chiamata all'API di Windows InitializeSecurityContext.

+0

Grazie per il collegamento, tuttavia per utilizzarlo in Delphi sembra che molte strutture di record API debbano essere create e riempite per prime. Ho iniziato una taglia, forse qualcuno può condividere del codice. – mjn

+1

La maggior parte delle intestazioni API Win32 è stata convertita nel progetto JEDI (http://jedi-apilib.sourceforge.net/), e se non è presente di solito utilizzo google's codesearch (http://www.google.com/codesearch? q = initializesecuritycontext + lang: pascal) per trovare il cappello di cui ho bisogno. –

+1

C'è un vecchio codice qui http://cc.embarcadero.com/Item/16213 che dimostra come chiamare InitializeSecurityContext con le credenziali NTLM. Potrebbe essere un buon inizio per chiunque tenti di ottenere un ticket Kerberos. – Mattl

1

Prima di leggere Kerberizing Applications Using Security Support Provider Interface per ottenere l'idea generale. InitializeSecurityContext è descritto come segue:

avvia un contesto di sicurezza per generando un token di protezione che deve essere passato al server. L'applicazione che utilizza questa funzione è chiamata un client SSPI.

Su msdn, l'elenco delle funzioni SSPI è disponibile in Authentication Functions.

Per il codice di esempio attuale, vedere SSPI page di campioni di Win32. Probabilmente troverai client.cpp utile. Un altro esempio simile è GssClient.c. Entrambi i codici lo eseguono in un ciclo perché la conversazione continua se viene restituito SEC_I_CONTINUE_NEEDED.

Problemi correlati