C# 仅将ASP.NET MVC应用程序管理站点锁定到本地主机

C# 仅将ASP.NET MVC应用程序管理站点锁定到本地主机,c#,asp.net,asp.net-mvc,security,authentication,C#,Asp.net,Asp.net Mvc,Security,Authentication,我有一个ASP.NETMVC网站,我想添加一个小的管理页面。我的问题是,我将部署这一切,我将没有可用的SSL。我同意要求管理员远程桌面并使用本地浏览器执行管理 这能做到吗?除了我的管理页面之外,我基本上希望获得与相同的行为。我可以通过web.config怎么做呢?请求。IsLocal是你的朋友 您可以使用它来检查请求是否来自本地计算机 自定义属性 然后,您可以将其扩展为自定义属性,但这可能有些过分。如果这是您选择的路线,这是一个很好的例子,可以做类似的事情: MVC3以后的版本允许您在控制器

我有一个ASP.NETMVC网站,我想添加一个小的管理页面。我的问题是,我将部署这一切,我将没有可用的SSL。我同意要求管理员远程桌面并使用本地浏览器执行管理


这能做到吗?除了我的管理页面之外,我基本上希望获得与
相同的行为。我可以通过web.config怎么做呢?

请求。IsLocal
是你的朋友

您可以使用它来检查请求是否来自本地计算机

自定义属性

然后,您可以将其扩展为自定义属性,但这可能有些过分。如果这是您选择的路线,这是一个很好的例子,可以做类似的事情:


MVC3以后的版本允许您在控制器级别设置属性,而不是在方法级别设置属性,这样您就可以锁定对负责管理页面的整个控制器的访问。

我通过编写一个自定义属性实现了这一点,如下所示:

public类IsLocalAttribute:AuthorizeAttribute
{
公共bool ThrowSecurityException{get;set;}
受保护的覆盖bool AuthorizeCore(HttpContextBase httpContext)
{
var isLocal=httpContext.Request.isLocal;
if(!isLocal&&ThrowSecurityException)
抛出新的SecurityException();
返回本地;
}
}
在整个控制器上的基本用法:

[IsLocal]
公共类LocalOnlyController:控制器
{
公共行动结果索引()
{
返回视图();
}
}
或使用特定方法:

public class SomeController : Controller
{
    [IsLocal]
    public ActionResult LocalOnlyMethod()
    {
        return View();
    }
}
如果要引发安全异常而不是302重定向,请执行以下操作:

public类SomeController:Controller
{
[IsLocal(ThrowSecurityException=true)]
公共操作结果LocalOnlyMethod()
{
返回视图();
}
}

创建我自己的Authorize属性,在其核心使用
Request.IsLocal
是否合理?