Domanda

Ho impostato un servizio WCF su un server che vive nel proprio gruppo di lavoro. Ho provato a stabilire una connessione TCP / IP da un client che vive nel dominio aziendale. Quando provo ad aprire una connessione, ottengo un SecurityNegotiationException con il messaggio:

  

" Un requisito di sicurezza lato remoto   non è stato realizzato durante   autenticazione. Prova ad aumentare il   ProtectionLevel e / o   ImpersonationLevel. & Quot; L'interno   l'eccezione recita: " L'accesso alla rete   fallito "

Dopo aver parlato con alcuni colleghi dei problemi e aver svolto alcune ricerche su Google, sono giunto alla conclusione che il problema è che il client sta tentando di accedere al server utilizzando il mio account di accesso e la password della mia rete aziendale. Poiché il server non fa parte della rete aziendale, non ha conoscenza della mia identità aziendale e quindi rifiuta il tentativo di accesso / connessione. Se questa analisi è corretta o no, non ho idea.

I risultati di Google sembrano suggerire che forse la soluzione è che devo impersonare l'account utente esistente sul computer server. - Mi sono anche imbattuto in questo articolo di codeproject che dimostra la rappresentazione dell'utente. Poiché l'unico account sul server è Amministratore senza password, ho provato dominio come indirizzo IP del computer come "10.0.0.11", nome utente come "Amministratore", e password come "". http://www.codeproject.com/KB/dotnet/UserImpersonationInNET. aspx? display = Stampa Sfortunatamente, fallisce con il messaggio:

  

" Errore di accesso: nome utente sconosciuto o password errata "

Un altro suggerimento per il problema: quando il client e il server sono entrambi macchine sulla rete aziendale, non ci sono problemi di connessione.

Come posso risolvere l'errore e completare la connessione al server? Anche se non è una buona pratica, sono completamente d'accordo con la rimozione di qualsiasi protezione in modo da poter portare avanti questo progetto

È stato utile?

Soluzione

Fino a quando non avrai compreso i dettagli, il modo migliore per imparare è disabilitare la sicurezza. Devi creare una nuova configurazione di bind sul lato server con la modalità di sicurezza impostata su "Nessuno". Denominalo " NoSecurity " per comodità. Questa configurazione deve avere lo stesso tipo (wsHttpBinding, ecc.) Utilizzato nell'endpoint. Quindi imposta la proprietà bindingConfiguration del tuo endpoint su " NoSecurity " ;.

Aggiorna la configurazione del tuo client e sei pronto per andare.

Altri suggerimenti

Non so come fare in modo che un gruppo di lavoro si fidi di un dominio, il che significa che hai un paio di scelte, come la vedo io

  1. Aggiungi un altro endpoint al servizio WCF che utilizza HTTP (un endpoint del servizio Web) e lo utilizza dal dominio. Questo aggira il problema di sicurezza, come puoi impersonare qui, o persino impostare un utente specifico che può accedere a chicche nel tuo server del gruppo di lavoro.

  2. Elimina la sicurezza nel servizio WCF. dovrei pensare a come farlo, ma non è comunque una buona idea.

  3. Crea un dominio e ottieni una relazione di fiducia.

Il progetto di codice che hai citato non ha a che fare con la rappresentazione in un modo che è direttamente utile a WCF, poiché l'autenticazione avviene prima che tu possa persino premere questo codice. Immagino che tu possa colpire i bit del framework per farlo, ma sarebbe brutto. Potrebbe esserci un modo per utilizzare il codice in un endpoint HTTP, ma ciò può già essere fatto senza incorrere nel sovraccarico di aggiunta di codice che elude la sicurezza di Windows.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top