6

Permítanme explicar: la aplicación ya está utilizando la seguridad integrada de Windows, no los formularios. Lo que estoy tratando de lograr es la llamada "step-up" de autenticación, o "fuerza de re-autenticación" para el siguiente escenario:¿Cómo vuelvo a autenticar a un usuario en una aplicación ASP.Net MVC 3 _Intranet_?

  1. el usuario está navegando por el sitio haciendo cosas comunes, trivial
  2. repente , el usuario tiene que realizar una acción delicada como autorizar una asignación de recursos o confirmar un préstamo de automóvil o algo similar
  3. al usuario se le solicita la credencial antes de que se redirija a la página sensible, de manera similar a SharePoint "Iniciar sesión como un usuario diferente"
  4. si, y solo si, las credenciales ingresadas son de la misma manera que para el usuario actualmente conectado, la aplicación procede al área sensible.

Esto evitaría que los 2 siguientes cuestiones:

  1. El usuario va a una reunión o un café y se olvida de cerrar la estación de trabajo y un colega utiliza la sesión para acceder a la sensible área
  2. El usuario ingresa las credenciales de su jefe (porque, vamos a decir que echó un vistazo por encima del hombro del jefe) para acceder al área sensible.

sé, algunos podrían ver esto como "paranoica", sino también algunos dirían que es de sentido común y debe ser construido en un marco en alguna parte (jQuery o .NET)

Realmente agradecería cualquier entrada. ¡Gracias!

+1

Para que conste en acta, no creo que haya algo como "ser paranoico" cuando se trata de información confidencial. ¿Has intentado configurar un directorio virtual para tu sitio? –

+0

Esta es una razón por la que casi nunca utilizo la autenticación integrada: delega la seguridad en la seguridad de la estación de trabajo, sobre la cual no tengo control. – tvanfosson

Respuesta

4

Haga que el formulario envíe las credenciales junto con la solicitud para realizar la acción, es decir, algunas acciones requieren que proporcione el nombre de usuario/contraseña. Use el método PrincipalContext ValidateCredentials para asegurarse de que se hayan ingresado las credenciales adecuadas y verifique que el nombre de usuario suministrado coincida con el nombre de usuario actual en el objeto 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

¡gracias por su pronta respuesta!pero esto significará crear una nueva vista para obtener manualmente las credenciales sobre https. ¿Hay alguna forma de utilizar el indicador de credenciales incorporadas tal como lo hace SharePoint? Supongo que lo hace al intentar acceder a un archivo protegido, '_layouts/AccessDenied.aspx'. – PricklyMaster

2

El usuario va a una reunión o un café y se olvida de cerrar la estación de trabajo y un colega utiliza la sesión para acceder a la zona sensible Eso sólo funciona la primera vez, pero ahora el jefe entra en una sensible área, vuelve a introducir sus credenciales, luego va a tomar un café. ¿Vas a solicitar todas las solicitudes delicadas? Los usuarios no soportarán eso.

El usuario ingresa las credenciales de su jefe (porque, digamos que echó un vistazo por encima del hombro del jefe) para acceder al área sensible. Si alguien conoce e ingresa las credenciales de su jefe, no hay nada que pueda hacer para detectarlo.

Cuestiones relacionadas