Wie erzwinge ich einen Benutzer erneut zu authentifizieren, bevor Sie eine Aktion in MVC ausführen?Re-authentifizieren Sie Benutzer in MVC-Anwendung für Aktion
Wir verwenden die Windows-Authentifizierung. Es gibt einige Aktionen, die wir sicherstellen möchten, dass sie vom Benutzer ausgeführt werden (und verhindern, dass andere Benutzer diese Aktionen ausführen, wenn der Benutzer vergessen hat, seine Arbeitsstation zu sperren).
Im Idealfall würde ich nur in der Lage sein, ein Attribut zu schreiben, die sich 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();
}
}
}
Es scheint, dass ich den Benutzer zwingen kann, um ihre Anmeldeinformationen erneut eingeben, indem Sie die benutzerdefinierten mit ReAuthenticate
Ausgabe Attribute eine HTTP 401
Antwort in der AuthorizeCore
Methode. Dies erforderte jedoch einige Tricks seit Html.ActionLink
wurde zwei Anforderungen zu senden:
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;
}
}
Gibt es einen besseren Weg, um die Wiederzulassung zu erreichen?
Was meinen Sie durch erneute Authentifizierung? –
Warum möchten Sie? Wenn der Benutzer authentifiziert wird, werden sie, nun, authentifiziert. Sie können OAuth berücksichtigen, wenn Sie keine Authentifizierung aufrechterhalten können. Vielleicht könnten Sie, wenn Sie Ihr Problem etwas genauer beschreiben, vorschlagen, was zu tun ist. – griegs
Ich habe die Frage mit weiteren Details über das Szenario aktualisiert und was ich versucht habe. – user2813199