IIS7 - 密码保护开发服务器

时间:2009-08-05 13:45:54

标签: asp.net-mvc iis-7 passwords

我有一个运行带有ASP.NET MVC Web应用程序的IIS 7.0的开发服务器,它使用Forms Authentication / Membership进行身份验证。

我需要能够阻止未经授权的用户查看此网站。但是,我们的客户应该能够输入简单的用户名/密码才能获得访问权限。

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

有什么建议吗?

4 个答案:

答案 0 :(得分:6)

我以前的回答说表格身份验证和基本的http auth可以在II7集成模式中并存。我完全错了,从那时起就做了一个简单的解决方案。

使用自定义HttpModule,您可以沿着常规格式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>

答案 1 :(得分:2)

我刚用Helicon Ape做了这件事。免费许可包括3个网站,对我而言足够好。

如果您在网站上使用此功能,请记住检查网站是否已激活许可证(开始菜单&gt; helicon&gt; ape&gt;经理,帮助,许可证管理员)。

答案 2 :(得分:0)

正如Aaron指出的那样,在IIS7中这并不是那么简单。现在,另一方面,这个老技巧充其量是不安全的,现在有更好的方法来实现它,并且能够使用所有认证方法与所有应用程序有很多优点。有一些方法可以解决这个问题,例如:

a)将开发站点保留在客户可以访问的VPN后面 b)反向代理站点,并让代理进行http认证 c)更多涉及的是使用演示模式构建您的应用程序。这里的诀窍是在给定特殊魔术查询字符串的情况下使其从第一个请求打开或关闭。在Session_Start()中检查,然后标记随附的用户并获利。

答案 3 :(得分:-1)

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

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