MVC でアクションを実行する前にユーザーに再認証を強制するにはどうすればよいですか?
Windows 認証を使用しています。ユーザーによって実行されていることを確認したいアクションがいくつかあります (ユーザーが自分のワークステーションをロックするのを忘れた場合に、他のユーザーがそれらのアクションを実行できないようにします)。
理想的には、次のように拡張する属性を書けるだけです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();
}
}
}
ReAuthenticate
メソッドでカスタム属性にHTTP 401
応答を発行させることで、ユーザーに資格情報の再入力を強制できるようAuthorizeCore
です。ただし、Html.ActionLink
2 つのリクエストを送信していたため、これにはいくつかのトリックが必要でした。
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;
}
}
再認証を行うためのより良い方法はありますか?