2012-10-03 2 views
5

Ho un'applicazione web asp.net che effettua chiamate a diversi servizi WCF. L'app Web si trova all'indirizzo www.mydomain.com e i servizi sono su services.mydomain.com. Sono ospitati dallo stesso server.Come funziona l'autenticazione Windows WCF senza impostare esplicitamente le credenziali

Ho appena aggiunto endpoint sicuri (bassicHttpBindings) per i servizi che utilizzano la sicurezza dei trasporti (https) e Windows authenication:

<binding name="WindowsSecuredBinding"> 
    <security mode="Transport"> 
    <transport clientCredentialType="Windows" /> 
    </security> 
</binding> 

e configurato il web app client per l'utilizzo di questi nuovi endpoint sicuri. Mi aspettavo che il prossimo passo fosse scrivere un codice nell'app Web per impostare le credenziali del client per passare l'autenticazione di Windows. Con mia sorpresa, le chiamate di servizio riescono senza impostare le credenziali del cliente. Suppongo che debba inviare l'account sul quale è in esecuzione l'app web ma non so come verificarlo. In altri scenari pensavo di aver visto le credenziali del client senza default implicito.

Così ho due domande:

  1. Come è successo l'autenticazione? Invia all'utente l'applicazione viene eseguita sotto, le credenziali dell'utente del browser, nessuna credenziale?
  2. Come è possibile eseguire il debug/log/trace del processo di autenticazione? Mi piacerebbe almeno vedere il nome utente che è stato autenticato in modo da poter convalidare la sicurezza.
+0

L'autenticazione della finestra utilizza [Kerberos] (http://support.microsoft.com/kb/217098) IIRC. Credo che usi l'identità corrente, ma non sono sicuro di come sia configurabile o di come funzionano tutti i piccoli dettagli. –

risposta

3
  1. con la configurazione attuale come lo avete sul lato server e client il client invia le creditials che è in esecuzione sotto. Poiché il tipo di credenziale è impostato su Windows, la negoziazione di sicurezza esegue il check in di Kerberos se si è in un dominio o in NTLM se si tratta di un ambiente di gruppo di lavoro. (More information can be found here.)
  2. Per eseguire il debug del processo di autenticazione WCF ha una funzione di controllo che può essere abilitata. Instructions for adding auditing are here.

Ecco le parti più importanti della revisione pagina di MSDN:

<behaviors> 
<behavior name="myAuditBehavior"> 
    <serviceSecurityAudit auditLogLocation="Application" 
    suppressAuditFailure="false" 
    serviceAuthorizationAuditLevel="None" 
    messageAuthenticationAuditLevel="SuccessOrFailure" /> 
</behavior> 
</behaviors> 

e aggiungendo il comportamento al servizio:

<service type="[Your service type here]" behaviorConfiguration="myAuditBehavior"> 

Una volta che il controllo è abilitato è possibile vedere tutte le attività di autorizzazione (successo e fallimento se lo si configura in questo modo). Questo dovrebbe consentire di verificare che la sicurezza sia impostata nel modo desiderato.

Se si ha bisogno di funzionalità per il passaggio delle credenziali dell'utente che sta utilizzando l'app Web ASP.NET (questo è chiamato Impersonation), la documentazione di msdn su di esso si trova in questa pagina "Delagation and Impersonation with WCF".

+0

Ottima risposta. Grazie per aver toccato anche l'imitazione. Quindi ho ragione nel ritenere che myClientBase.ClientCredentials sia già, per impostazione predefinita, impostato su System.Net.CredentialCache.DefaultNetworkCredentials o DefaultNetworkCredentials qualcos'altro? Forse lo scoprirò da solo usando l'auditing. – xr280xr

+0

La mia ipotesi è che sia impostato sulle credenziali dell'identità del pool di applicazioni su cui viene eseguita l'app Web (supponendo che si stia ospitando in IIS).È possibile che il sito Web fosse già configurato per la rappresentazione che la chiamata WCF lo sta ereditando (ma ne dubito). L'auditing sarà l'unico modo per saperlo con certezza, ma suppongo che sia l'identità del pool di app. –

+0

Il sito dell'app Web è configurato per consentire l'accesso anonimo utilizzando l'account IUSR_ * locale. Sta usando quell'account per l'autorizzazione che è diverso dall'account del pool di app. – xr280xr