6

Lasciatemi spiegare: l'applicazione sta già utilizzando la sicurezza integrata di Windows, non i moduli. Quello che sto cercando di realizzare è un cosiddetto "step-up" di autenticazione, o "forza nuova autenticazione" per il seguente scenario:Come ricoautenticare un utente in un'applicazione _Intranet_ ASP.Net MVC 3?

  1. l'utente sta visualizzando il sito facendo comuni roba, banale
  2. improvvisamente , l'utente deve eseguire un'azione sensibile come autorizzare un'assegnazione di risorse o confermare un prestito auto o qualcosa di simile
  3. l'utente viene richiesto per le credenziali prima (s) viene reindirizzato a la pagina sensibile, in un modo simile in SharePoint "Accedi come un utente diverso"
  4. se, e solo se, le credenziali immesse sono uguali a quelle dell'utente attualmente loggato, l'applicazione procede all'area sensibile.

Ciò eviterebbe i seguenti 2 temi:

  1. L'utente va per una riunione o un caffè e si dimentica di bloccare la workstation e un collega utilizza la sessione per accedere al sensibile zona
  2. L'utente inserisce le credenziali del proprio capo (perché, diciamo, dare un'occhiata al capo "sholder") per accedere all'area sensibile.

so, qualcuno potrebbe guardare a questo come "essere paranoico", ma anche alcuni direbbero che è il senso comune e dovrebbe essere costruire in un quadro da qualche parte (jQuery o .NET)

Vorrei davvero apprezzare qualsiasi input Grazie!

+1

Per la cronaca, non penso ci sia qualcosa come "essere paranoici" quando si tratta di informazioni sensibili. Hai provato a configurare una directory virtuale per il tuo sito? –

+0

Questo è uno dei motivi per cui non utilizzo quasi mai l'autenticazione integrata: delega la sicurezza alla sicurezza della workstation, sulla quale non ho controllo. – tvanfosson

risposta

4

Fare in modo che il modulo invii le credenziali insieme alla richiesta per eseguire l'azione, ovvero alcune azioni richiedono di fornire nome utente/password. Utilizzare il metodo PrincipalContext ValidateCredentials per assicurarsi che siano state immesse le credenziali appropriate e controllare che il nome utente fornito corrisponda al nome utente corrente nell'oggetto User.Identity.

public ActionResult SensitiveAction(SensitiveModel model, string username, string password) 
{ 
    using (var context = new PrincipalContext(ContextType.Domain)) 
    { 
     if (!string.Equals(this.User.Identity.Name,username,StringComparison.OrdinalIgnoreCase) 
      || !context.ValidateCredentials(username,password)) 
     { 
       return View("PermissionDenied"); 
     } 
    } 

    ... 
} 
+1

grazie per la tua pronta risposta!ma questo significherà creare una nuova vista per ottenere manualmente le credenziali su https. C'è un modo per utilizzare il prompt delle credenziali build-in proprio come lo fa SharePoint? Immagino che provi ad accedere a un file protetto, '_layouts/AccessDenied.aspx'. – PricklyMaster

2

L'utente va per una riunione o un caffè e si dimentica di bloccare la stazione di lavoro e un collega utilizza la sessione per accedere alla zona sensibile che funziona solo la prima volta, ma ora il boss entra in una sensibile area, rientra nelle sue credenziali, quindi va a prendere un caffè. Hai intenzione di richiedere ogni richiesta sensibile? Gli utenti non lo tollereranno.

L'utente immette le credenziali del proprio capo (perché, diciamo che ha sbirciato sul capo 'sholder) per accedere all'area sensibile. Se qualcuno conosce e inserisce le credenziali del proprio capo, non c'è nulla che tu possa fare per rilevarlo.

Problemi correlati