2009-08-05 20 views
8

Ho un server di sviluppo che esegue IIS 7.0 con un'applicazione Web MVC ASP.NET, che esegue l'autenticazione utilizzando l'autenticazione/appartenenza moduli.IIS7 - Server di sviluppo protezione password

Devo essere in grado di impedire agli utenti non autorizzati di visualizzare questo sito. I nostri clienti dovrebbero tuttavia essere in grado di inserire un semplice nome utente/password per accedere.

Dopo aver eseguito questa operazione, dovrebbero essere in grado di interagire con l'applicazione Web utilizzando l'Autenticazione moduli come se fossero appena arrivati ​​a un sito non protetto.

Qualche suggerimento?

+2

Si tratta di un errore/insufficienza assoluta su parte di IIS7. Caso massiccio di sovraingegneria e miopia di Microsoft qui. Questo dovrebbe essere un pulsante "Aggiungi la password di popup sporca a buon mercato" con un solo clic separato per tutto il mondo accademicamente bello e sovrastimato di moduli di autenticazione complessi e schifezze che hanno escogitato. – Aaron

+0

È sorprendente il numero di utenti che sembrano perfettamente disposti ad accettarlo e sopportarlo scrivendo i propri moduli wrapper personalizzati e simili. Solo un totale di persone che superano l'ingegneria, prendi il programma. Questo dovrebbe essere così semplice. Non scriverò alcun codice personalizzato per implementare una password popup frivola che in genere richiedeva 2 secondi per la configurazione. Ci deve essere un modo semplice. – Aaron

+0

Felice di vedere che non sono solo io che ho questo problema –

risposta

-1

Abbiamo scritto un modulo personalizzato per IIS per consentire determinati intervalli IP attraverso automaticamente e presentare a chiunque altro un dialogo di accesso. Una volta effettuato l'accesso, memorizzava tale fatto nella loro sessione e passava semplicemente le richieste.

Funziona bene, può essere applicato a qualsiasi cosa in siti o servizi IIS.

+0

Non va bene quando il mio ISP mi dà un IP dinamico totalmente casuale ogni volta.Inoltre non va bene quando ho bisogno di dare accesso a un gruppo selezionato di tester o partner commerciali, ad esempio 50 di loro, che hanno tutti bisogno di accedere al sito dev. Non posso farli spendere tutti un'ora per andare in giro a cercare il loro indirizzo IP perché si trovano tutti in luoghi fisici diversi e sono uomini d'affari, non persone tecniche. Non hanno idea di come ottenere il loro indirizzo IP dal proprio router/config di rete, ecc. Devo semplicemente essere in grado di inviarli tramite e-mail con una password in modo che possano facilmente raggiungere il sito. – Aaron

5

La mia risposta precedente diceva che i moduli auth e http auth potrebbero vivere fianco a fianco in modalità integrata II7. Ero completamente sbagliato e da allora ho fatto una soluzione semplice.

Utilizzando un personalizzato HttpModule è possibile aggiungere autenticazione di base lungo il lato regolare le forme di autenticazione

public class CustomBasicAuthHttpModule : IHttpModule 
{ 
    private HttpApplication httpApplicationContext; 

    public void Dispose() 
    { 
    } 

    public void Init(HttpApplication context) 
    { 
     this.httpApplicationContext = context; 
     context.BeginRequest += this.OnBeginRequest; 
     context.EndRequest += this.OnEndRequest; 
    } 

    private void OnBeginRequest(object sender, EventArgs e) 
    { 
     // your logic of checking Auth header goes here 
     if (this.httpApplicationContext.Request.Headers["Authorization"] != "Basic base64-encoded-user:pass") 
     { 
      this.httpApplicationContext.Response.StatusCode = 401; 
      this.httpApplicationContext.Response.End(); 
     } 
    } 

    private void OnEndRequest(object sender, EventArgs e) 
    { 
     if (this.httpApplicationContext.Response.StatusCode == 401) 
     { 
      this.httpApplicationContext.Response.AddHeader("WWW-Authenticate", "Basic"); 
     } 
    } 

poi nel web.config

<system.webServer> 
    <modules> 
     <add name="CustomBasicAuthHttpModule" type="Namespace.CustomBasicAuthHttpModule, AssemblyName"/> 
    </modules> 
    </system.webServer> 
+0

In realtà non è così semplice nel mio caso. La tua soluzione è stata la prima cosa che ho provato, ma in qualche modo "l'autenticazione di base" interferisce con la "autenticazione delle forme" del nuovo progetto MVC di base come tutti noi conosciamo da Visual Studio/New Project. Dopo l'autenticazione tramite "autenticazione di base", mi viene reindirizzato all'URL di accesso predefinito qualunque cosa provi e al mio browser non è nemmeno permesso di scaricare il file Site.css. Qualche idea ?! –

+0

L'autenticazione di base IIS non avrà nulla a che fare con l'autenticazione dei moduli, completamente diversa. Il modo in cui hai formulato la tua domanda ha fatto sembrare che tu voglia bloccare tutti gli accessi anche alla pagina di accesso dei moduli a chiunque tranne i tuoi clienti, ma una volta passata la challenge-response di IIS, accedono tramite l'autenticazione dei moduli. Non so come avere IIS autenticare per conto di SQL Form, mi dispiace. Suppongo di non avere il punto, cosa c'è di sbagliato nell'autenticazione dei moduli, perché una risposta alla sfida IIS dovrebbe essere migliore? – JeremyWeir

+0

Hai sbagliato jayrdub. La domanda è stata spiegata bene e questo è un requisito molto comune. IIS afferma che "l'autenticazione di base non può essere utilizzata con alcun metodo di autenticazione basato su reindirizzamenti come l'autenticazione dei moduli". Anche l'autenticazione di Windows viene fornita con lo stesso avvertimento. È possibile utilizzare l'autenticazione di base e di Windows senza problemi, a patto che non si disponga anche dell'autenticazione di moduli in esecuzione nell'applicazione. La domanda dell'OP è molto legittima e un requisito comune. – Aaron

2

ho appena fatto questo con Helicon Ape. La licenza gratuita include 3 siti, che per me sono stati abbastanza buoni.

Se si utilizza questo sito su un sito, è sufficiente ricordare di verificare se la licenza è attivata per il sito (menu di avvio> helicon> ape> manager, help, gestore di licenze).

+0

Un add-on di terze parti non dovrebbe essere richiesto per un compito così semplice. – Aaron

+2

No, non dovrebbe. Non significa che non lo sia, purtroppo. –

0

Come sottolinea Aaron, questo non è così semplice in IIS7. Ora, il rovescio della medaglia è che questo vecchio trucco è al sicuro insicuro e ci sono modi migliori per farlo ora e l'essere in grado di utilizzare tutti i metodi authenticaiton con tutte le app ha molti vantaggi. Ci sono alcuni modi per aggirare questo come:

a) mantenere il sito di sviluppo dietro una VPN a cui i vostri clienti possono accedere.
b) reindirizzare il sito e consentire al proxy di eseguire l'autenticazione http.
c) Un po 'più impegnato sarebbe quello di costruire la tua app con una modalità demo. Trucco qui è di farlo accendere o spegnere dalla prima richiesta data una speciale stringa di query magica. Verifica ciò in Session_Start() quindi contrassegna gli utenti che vengono con esso e guadagna.

Problemi correlati