Autenticazione di un utente di Active Directory su un socket TCP

3

Ho un server che comunica con i client su un socket .NET. Voglio che il server autentifichi la connessione in un tipo di stile SSO verificando che l'utente corrente si trovi in un determinato gruppo.

Il modo ingenuo è di inviare System.Environment.UserName al server e lasciare che determini le autorizzazioni dell'utente in in questo modo .

Tuttavia, sembra essere contrario alle best practice poiché qualsiasi client può falsificare il nome utente.

C'è un'API che posso usare per inviare le credenziali in maniera fidata alla mia applicazione server, su un socket TCP?

SSL non è sufficiente, dal momento che chiunque può stabilire una connessione sicura, ma ancora rovinare il nome utente.

    
posta Josh Wyant 23.06.2014 - 19:40
fonte

2 risposte

2

In un mondo di Active Directory, supponendo che sia client che server risiedano nello stesso dominio, l'autenticazione che si è verificata sul client può essere mostrata al server, in modo da convincere il server. Questo funziona perché un utente autenticato su una macchina riceve un "ticket" che in realtà è una sorta di riferimento autenticato dal server AD; quando il client mostra il ticket sul server, il server può mostrarlo al suo server AD e il server AD risponderà che il ticket è effettivamente valido. I dettagli possono essere complessi ma puoi lasciare tutto il lavoro alle librerie Microsoft.

Se il lato server è un server IIS con ASP.NET e il client utilizza .NET, questo è piuttosto simple da configurare. Se vuoi fare il lavoro da solo, ad es. utilizzando direttamente TcpListener e TcpClient , allora questo comporterà, anzi, più lavoro; guarda i collegamenti forniti da @ makerofthings7.

Nota che vuoi comunque utilizzare SSL, per contrastare gli eavesdroppers.

Se client e server non fanno parte dello stesso dominio, le cose diventano un po 'più complesse, perché l'applicazione client deve in qualche modo ottenere le credenziali giuste (cioè il nome utente e la password) per il dominio del server, mentre l'applicazione viene eseguita nel dominio del cliente distinto. In alternativa, è possibile utilizzare l'autenticazione client basata su certificato, che può essere accoppiata con SSL; in tal caso, l'utente del client deve avere un certificato appropriato e una chiave privata installata nel suo archivio di certificati personali e l'applicazione lo utilizzerà.

    
risposta data 23.06.2014 - 20:12
fonte
1

Suppongo che tu stia utilizzando un WPF grasso o un client Forms, e non una pagina web, perché la risposta facile è ADFS v2 in modalità passiva.

Se usi il TCP non elaborato, dovrai inventare gran parte del lavoro da solo, dal momento che è necessario autenticare la connessione TCP "in qualche modo". ADFS v2 funziona anche con client attivi e ci sono campioni nell'SDK.

La soluzione migliore per le connessioni basate su TCP / IP è l'utilizzo di RPC, in particolare WCF (Windows Communication Foundation) con ADFSv2.

Perché hai taggato questo LDAP? Aggiunge contesto alla domanda? Si prega di elaborare.

    
risposta data 23.06.2014 - 20:01
fonte

Leggi altre domande sui tag