Domanda

Ho un'app Web abbastanza complessa creata (da un appaltatore) per utilizzare l'autenticazione integrata. Come parte del processo di autenticazione, viene utilizzata una funzione GetNetworkID () che assomiglia a questa:

private string GetNetworkID()
{
    return HttpContext.Current.User.Identity.Name.Split(new char[] { '\\' })[1];
}

Quando eseguo questo nella mia casella di sviluppo, il valore HttpContext.Current.User.Identity.Name è myNetwork \\ myUserID , quindi la funzione sopra riportata restituisce il mio ID utente, come previsto, e il processo di autenticazione funziona perfettamente.

Ma quando eseguo questo sul mio server web, ottengo un indice fuori dai limiti dell'array generato dall'istruzione return nella funzione GetNetworkID () .

Sono un po 'perso su come risolvere questo problema e su come capire se si tratta di un problema di configurazione IIS (il mio server Web è un box di Windows Server 2008 con IIS 7) o qualcos'altro.

Se codifico il mio ID utente come valore di ritorno per la funzione GetNetworkID () , funziona sul server Web, ma non ho grandi idee su come eseguire il debug il server web per determinare quale sia il valore di ritorno HttpContext.Current.User.Identity.Name che sta causando l'errore dell'indice dell'array.

Qualche suggerimento?

È stato utile?

Soluzione

IIS viene eseguito come account del servizio IIS, pertanto Current.User.Identity sarà probabilmente il nome dell'account IIS.

Per completezza, dovresti controllare '\' con un Find () o chiamando split e controllando la lunghezza dell'array risultante. Se la lunghezza è 1, significa che l'id non è sotto forma di dominio \ nomeutente.

In generale, se si desidera eseguire il debug, è possibile scrivere qualsiasi valore nel flusso di risposta HTTP in questo modo:

Response.Write(HttpContext.Current.User.Identity.Name)

Un altro metodo è impostare una variabile di pagina ASP e impostare la variabile di pagina sul valore che si desidera ispezionare. È possibile visualizzare il valore della variabile tramite il codice ASP o Javascript.

Altri suggerimenti

Potrebbe mancare un'impostazione IIS.

Prova in IIS: Sito Web (tasto destro) | Proprietà | Directory Directory (scheda)

Fai clic su " Modifica ... "

Quindi seleziona " Autenticazione integrata di Windows "

Penso che l'utente che accede alla tua applicazione Web sull'altro server non sia un login valido. E quindi un risultato non viene restituito su User.Identity.Name.

Come hai detto, funziona quando hai codificato il nome utente. Ciò significa che i crediti dell'utente del PC che stai utilizzando per accedere non sono consentiti sul tuo sito. Pertanto, questo deve essere diverso dalle credenziali che stai codificando.

La soluzione migliore è eseguire il debug sul server Web (non è difficile: tutto ciò che vuoi restituire è User.Identity.Name e puoi ottenere il nome utente e dedurre la logica da lì) e verificare i contenuti nel tuo web .config file.

Come ha sottolineato Alan (e l'ho votato per questo) probabilmente vorrai aggiungere un segno di spunta su quale forma prende User.Identity.Name . Una routine aggiornata potrebbe ad esempio apparire così:

private string GetNetworkID()
{
    var name = HttpContext.Current.User.Identity.Name;
    return name.InStr("\\") > -1 ? name.Split("\\")[1] : name;
}

Questo restituirà la seconda parte del nome di accesso se è presente un \ , e la stringa completa in caso contrario.

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