小さな管理ページを追加したい ASP.NET MVC Web サイトがあります。私が抱えている問題は、これを全面的に展開し、SSL を利用できないことです。管理者にリモート デスクトップを要求し、ローカル ブラウザを使用して管理を実行することは問題ありません。
これはできますか?<customeErrors mode="RemoteOnly" />
基本的に、管理ページを除いて同じ動作を得たいと考えています。どうすればweb.configでこれを行うことができますか?
小さな管理ページを追加したい ASP.NET MVC Web サイトがあります。私が抱えている問題は、これを全面的に展開し、SSL を利用できないことです。管理者にリモート デスクトップを要求し、ローカル ブラウザを使用して管理を実行することは問題ありません。
これはできますか?<customeErrors mode="RemoteOnly" />
基本的に、管理ページを除いて同じ動作を得たいと考えています。どうすればweb.configでこれを行うことができますか?
Request.IsLocal
あなたの友達です。
http://msdn.microsoft.com/en-us/library/system.web.httprequest.islocal.aspx
これを使用して、要求がローカル マシンから送信されていることを確認できます。
カスタム属性
これを拡張してカスタム属性にすることもできますが、それはやり過ぎかもしれません。それがあなたが選択したルートである場合、これは同様のことを行う良い例です:
MVC3以降では、メソッドではなくコントローラーレベルで属性を設定できるため、管理ページを担当するコントローラー全体へのアクセスをロックできます。
次のように、カスタム属性を記述してそれを行いました。
public class IsLocalAttribute : AuthorizeAttribute
{
public bool ThrowSecurityException { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var isLocal = httpContext.Request.IsLocal;
if (!isLocal && ThrowSecurityException)
throw new SecurityException();
return isLocal;
}
}
コントローラー全体での基本的な使用法:
[IsLocal]
public class LocalOnlyController : Controller
{
public ActionResult Index()
{
return View();
}
}
または特定の方法で:
public class SomeController : Controller
{
[IsLocal]
public ActionResult LocalOnlyMethod()
{
return View();
}
}
302 リダイレクトの代わりにセキュリティ例外をスローする場合:
public class SomeController : Controller
{
[IsLocal(ThrowSecurityException = true)]
public ActionResult LocalOnlyMethod()
{
return View();
}
}