Come impone a un utente la riautenticazione prima di eseguire un'azione in MVC?Ri-autenticare l'utente nell'applicazione MVC per l'azione
Stiamo utilizzando l'autenticazione di Windows. Ci sono alcune azioni che vogliamo fare in modo che vengano eseguite dall'utente (e impedire ad altri utenti di eseguire quelle azioni se l'utente ha dimenticato di bloccare la propria workstation).
Idealmente mi piacerebbe solo essere in grado di scrivere un attributo che si estende Authorize
:
namespace AuthTest.Controllers
{
[Authorize(Roles="MyApp")]
public class HomeController : Controller
{
public ActionResult Index()
{
// A regular action
return View();
}
[ReAuthenticate]
public ActionResult CriticalAction()
{
// Do something important
return View();
}
}
}
Sembra che posso forzare l'utente a inserire nuovamente le proprie credenziali da avere il costume ReAuthenticate
attribuiscono emettere una risposta HTTP 401
nel metodo AuthorizeCore
. Tuttavia, questo ha richiesto un po 'di inganno dal Html.ActionLink
è stato l'invio di due richieste:
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
bool ok = base.AuthorizeCore(httpContext);
if (!ok) return false;
if (httpContext.Session["ReAuthCnt"] == null)
{
httpContext.Session["ReAuthCnt"] = 1;
return false;
}
else if ((int) httpContext.Session["ReAuthCnt"] < 2)
{
httpContext.Session["ReAuthCnt"] = (int)httpContext.Session["ReAuthCnt"] + 1;
return false;
}
else
{
httpContext.Session["ReAuthCnt"] = 0;
return true;
}
}
C'è un modo migliore per ottenere la ri-autorizzazione?
Che cosa si intende per autenticare nuovamente? –
Perché vorresti? Se l'utente è autenticato, allora è, beh, autenticato. Potresti considerare OAuth se non puoi mantenere un'autenticazione. Forse se hai descritto un po 'di più il tuo problema, potremmo suggerire cosa fare. – griegs
Ho aggiornato la domanda con ulteriori dettagli sullo scenario e su ciò che ho provato. – user2813199