Asp.net mvc IIS7-密码保护开发服务器

Asp.net mvc IIS7-密码保护开发服务器,asp.net-mvc,iis-7,passwords,Asp.net Mvc,Iis 7,Passwords,我有一个运行IIS 7.0和ASP.NET MVC Web应用程序的开发服务器,它使用表单身份验证/成员身份验证进行身份验证 我需要能够防止未经授权的用户查看此网站。然而,我们的客户应该能够输入一个简单的用户名/密码来获得访问权限 这样做之后,他们应该能够使用表单身份验证与web应用程序进行交互,就好像他们刚刚来到一个未受保护的站点一样 有什么建议吗?我们为IIS编写了一个自定义模块,允许某些IP范围自动通过,并为其他任何人提供登录对话框。一旦他们登录,它就会将该事实存储在会话中,并简单地传递请

我有一个运行IIS 7.0和ASP.NET MVC Web应用程序的开发服务器,它使用表单身份验证/成员身份验证进行身份验证

我需要能够防止未经授权的用户查看此网站。然而,我们的客户应该能够输入一个简单的用户名/密码来获得访问权限

这样做之后,他们应该能够使用表单身份验证与web应用程序进行交互,就好像他们刚刚来到一个未受保护的站点一样


有什么建议吗?

我们为IIS编写了一个自定义模块,允许某些IP范围自动通过,并为其他任何人提供登录对话框。一旦他们登录,它就会将该事实存储在会话中,并简单地传递请求


工作正常,可以应用于IIS站点或服务中的任何内容。

我之前的回答说forms auth和基本http auth可以在II7集成模式下共存。我完全错了,从那以后,我提出了一个简单的解决办法

使用自定义HttpModule,您可以在常规表单auth旁边添加基本auth

public class CustomBasicAuthHttpModule : IHttpModule
{
    private HttpApplication httpApplicationContext;

    public void Dispose()
    {
    }

    public void Init(HttpApplication context)
    {
        this.httpApplicationContext = context;
        context.BeginRequest += this.OnBeginRequest;
        context.EndRequest += this.OnEndRequest;
    }

    private void OnBeginRequest(object sender, EventArgs e)
    {
        // your logic of checking Auth header goes here
        if (this.httpApplicationContext.Request.Headers["Authorization"] != "Basic base64-encoded-user:pass")
        {
            this.httpApplicationContext.Response.StatusCode = 401;
            this.httpApplicationContext.Response.End();
        }
    }

    private void OnEndRequest(object sender, EventArgs e)
    {
        if (this.httpApplicationContext.Response.StatusCode == 401)
        {
            this.httpApplicationContext.Response.AddHeader("WWW-Authenticate", "Basic");
        }
    }
然后在web.config中

  <system.webServer>
    <modules>
      <add name="CustomBasicAuthHttpModule" type="Namespace.CustomBasicAuthHttpModule, AssemblyName"/>
    </modules>
  </system.webServer>

我就是用这个做的。免费许可证包括3个网站,这对我来说已经足够好了


如果在站点上使用此选项,请记住检查该站点的许可证是否已激活(开始菜单>helicon>ape>管理器,帮助,许可证管理器)

正如Aaron指出的,这在IIS7中不是那么简单。另一方面,这个老把戏充其量是不安全的,现在有更好的方法可以做到这一点,并且能够在所有应用程序中使用所有身份验证方法有很多优势。有一些方法可以解决这个问题,例如:

a) 将开发站点保留在客户端可以访问的VPN后面。
b) 反向代理站点,并让代理进行http身份验证。

c) 更重要的一点是使用演示模式构建应用程序。这里的诀窍是在给定一个特殊的神奇查询字符串的第一个请求中打开或关闭它。在Session_Start()中检查它,然后标记随它而来的用户并从中获利。

实际上,在我的例子中,这并不是那么简单。您的解决方案是我尝试的第一件事——但不知何故,“基本身份验证”干扰了最基本的新MVC项目的“表单身份验证”,正如我们在Visual Studio/new project中所知道的那样。通过“基本身份验证”进行身份验证后,无论我尝试什么,我都会被重定向到默认登录url,甚至不允许我的浏览器下载Site.css文件。有什么想法吗?!IIS基本身份验证与表单身份验证无关,完全不同。你回答问题的方式听起来像是想阻止除客户端以外的任何人访问表单登录页面,但一旦通过IIS质询响应,他们就会通过表单身份验证登录。对不起,我不知道如何让IIS代表sql表单进行身份验证。我想我也不明白,表单身份验证有什么问题,为什么IIS质询响应会更好?你完全错了jayrdub。这个问题解释得很好,这是一个非常普遍的要求。IIS本身声明“基本身份验证不能与任何基于重定向的身份验证方法(如表单身份验证)一起使用”。“Windows身份验证”也有同样的警告。如果应用程序中没有在下面运行表单身份验证,则可以使用基本身份验证和windows身份验证。OP的问题是非常合法的,也是一个常见的要求。在应用程序本身中使用“表单身份验证”的ASP.Net应用程序是非常常见的。说明:这可能只是像在你的网站上有一个“会员登录”区域——大多数网站都有类似的功能。然后你还想在整个网站上抛出一个快速而肮脏的弹出密码,因为它目前正在开发/测试中,你不希望随机的互联网冲浪者看到它。这在IIS6和unix web服务器上一直都是这样做的,为什么IIS7不允许通过单击按钮进行如此简单的配置。@Aaron,你完全正确,我不知道我为什么这样回答。我编辑并添加了我使用的解决方案。这样简单的任务不需要第三方加载项。不,不应该。可悲的是,这并不意味着它不是。当我的ISP每次都给我一个完全随机的动态IP时,这是不好的。当我需要访问一组选定的测试人员或业务合作伙伴时,比如说其中50人,他们都需要访问开发站点,这也没有什么好处。我不能让他们每个人都花一个小时去摸索他们的IP地址,因为他们都位于不同的物理位置,他们是商务人员,而不是技术人员。他们不知道如何从路由器/网络配置等获取IP地址。我只需要能够通过电子邮件向他们发送密码,这样他们就可以轻松访问网站。这是IIS7的绝对失败/不足。这是微软公司的大规模工程过度和短视案例。这应该是一次点击“添加廉价脏弹出密码”button独立于他们设计的复杂认证模块和垃圾的所有过度设计的学术上美丽的世界。令人惊讶的是,有许多哑巴似乎完全愿意接受这一点,并通过编写自己的定制包装模块等来忍受它。只需要超过工程人员,就可以开始这个项目。这应该很简单。我不打算编写任何自定义代码来实现一个fricking弹出式密码,该密码通常需要2秒钟来配置。必须有一个简单的方法。很高兴看到不仅仅是我有这个问题