Request.ServerVariables("LOGON_USER") restituisce una stringa vuota in ASP.NET

Questo articolo fornisce soluzioni per il problema in cui la Request.ServerVariables("LOGON_USER") variabile restituisce una stringa vuota in ASP.NET.

Versione originale del prodotto: ASP.NET
Numero KB originale: 306359

Sintomi

Se si tenta di accedere alla Request.ServerVariables("LOGON_USER") variabile in ASP.NET, viene restituita una stringa vuota.

Se si usa Microsoft Visual C# .NET, la sintassi seguente accede a questa variabile:

Request.ServerVariables["LOGON_USER"]

Causa

Questo problema si verifica perché le variabili correlate all'autenticazione nella ServerVariables raccolta non vengono popolate se si usa la sicurezza di accesso anonimo per accedere alla pagina .aspx. Questo problema può verificarsi anche se si concede all'utente anonimo l'accesso nella <authorization> sezione del file web.config .

Risoluzione

Per popolare la LOGON_USER variabile quando si usa una modalità di autenticazione diversa da None, è possibile negare l'accesso all'utente anonimo nella <authorization> sezione del file web.config . Per negare l'accesso all'utente anonimo nella <authorization> sezione , seguire questa procedura:

  1. Modificare la modalità di autenticazione nel file web.config in un valore diverso da None. Ad esempio, la voce seguente nel file web.config imposta la modalità di autenticazione su Autenticazione basata su form:

    <authentication mode="Forms" />
    
  2. Per negare l'accesso all'utente anonimo nel file web.config , usare la sintassi seguente:

    <authorization>
        <deny users = "?" /> <!-- This denies access to the anonymous user -->
        <allow users ="*" /> <!-- This allows access to all users -->
    </authorization>
    

Se si usa autenticazione di Windows, è anche possibile seguire questa procedura per risolvere il problema:

  1. Modificare la modalità di autenticazione nel file web.config in come indicato di Windows seguito:

    <authentication mode="Windows" />
    
  2. In Gestione servizi Internet fare clic con il pulsante destro del mouse sul file .aspx o sulla cartella Progetto Web e quindi scegliere Proprietà.

  3. Se si seleziona Proprietà per la cartella Progetto Web , selezionare la scheda Sicurezza directory . Se si seleziona Proprietà per il file .aspx, selezionare la scheda Sicurezza file .

  4. In Accesso anonimo e controllo di autenticazione selezionare Modifica.

  5. Nella finestra di dialogo Metodi di autenticazione deselezionare la casella di controllo Accesso anonimo e quindi selezionare la casella di controllo Basic, Digest o Integrated (NT Challenge/Response).

  6. Selezionare OK per chiudere entrambe le finestre di dialogo.

Stato

Si tratta di un comportamento legato alla progettazione del prodotto.

Ulteriori informazioni

ASP.NET offre nuove modalità di autenticazione e schemi di autorizzazione, che è possibile configurare nei file .config. Per questo motivo, la modifica delle modalità di autenticazione in IIS da sola potrebbe non produrre sempre i risultati desiderati. Pertanto, è necessario considerare anche le impostazioni di sicurezza nei file .config.

Nota

Quando si abilita l'autenticazione anonima in combinazione con autenticazione di Windows o se si concede l'accesso all'utente anonimo nella <authorization> sezione mentre si usa una modalità di autenticazione diversa da None, anche altre variabili del server, ad AUTH_USER esempio e REMOTE_USER (nonché la HttpContext.Current.User.Identity.Name proprietà ), restituiscono una stringa vuota. Per popolare queste variabili, è possibile usare una qualsiasi delle risoluzioni indicate in precedenza.

In ASP.NET è anche possibile utilizzare la IsAuthenticated proprietà dell'oggetto Request per determinare se viene utilizzata la sicurezza di accesso anonimo. IsAuthenticated restituisce false se l'accesso anonimo è attivato e restituisce true se si utilizza qualsiasi altro mezzo di autenticazione, ad Formsesempio , Passport, Integrated (NT Challenge/Response)o Basic.

Riferimenti