【问题标题】:Securing an ASP.NET MVC application for beta testing?保护 ASP.NET MVC 应用程序以进行 beta 测试?
【发布时间】:2010-01-08 18:17:18
【问题描述】:

大家好。我有一个 ASP.NET MVC 应用程序,我将很快将其部署到实时服务器。从理论上讲,我希望在进行 beta 测试时对应用程序进行密码保护,而无需修改应用程序中的底层代码库或成员资格。我将有几个人进行 beta 测试,所以它必须在网络上可用。一个简单的场景:

  1. 用户导航到测试版应用程序
  2. 也许 HttpHandler 会处理请求并将它们重定向到插页式的临时登录页面,他们必须输入测试版密码才能访问应用程序

Stackoverflow 在进行 beta 测试时使用了类似的技术。有什么想法吗?

为了澄清而进行的编辑。我无法访问此特定应用程序的 IIS,因为我使用的是托管主机。

【问题讨论】:

  • 能否为会员提供者提供一个接口,并在上线时更改该接口的实现?
  • 好吧,我不确定。我使用 OpenID 作为我的会员提供者。
  • 我之前问过一个类似的问题,但它没有得到太多的活动,所以我很高兴再次看到这个问题。更多输入:stackoverflow.com/questions/1171897/…

标签: asp.net-mvc


【解决方案1】:

几个想法:

  1. 在 IIS 中对整个应用程序/站点使用 Windows 身份验证
  2. 您提到的想法也是 IMO 的一个好方法,在这种情况下实施可能会很灵活。

【讨论】:

  • 我同意让 IIS 处理它。只需单击几下,您就无需花费任何时间构建您以后必须撤消的东西。
  • 抱歉,我没有提到我无法访问 IIS,因为我使用的是托管解决方案。
【解决方案2】:

您可以连接一个快速的自定义 AuthorizeAttribute 来检查自定义 Auth cookie。只需在测试版中用它装饰您的控制器,并在您准备好使用时将其删除。

类似这样的东西(PS - 在没有测试的情况下就这样做了):

    public class BetaTestAuthorize : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            //if(cookie checks out ok)
                //return true;
            //else
                //httpContext.Response.Redirect("BetaLoginPage");

            return base.AuthorizeCore(httpContext);
        }
    }

有一个像这样的动作方法:

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult BetaLogin(string username, string password)
        {
            if(username == "whatever" && password == "whatever")
            {
                 //create custom cookie
                 return RedirectToAction("Index", "Home");
            }
            else
                return View();
        }

【讨论】:

    【解决方案3】:

    当您在 Visual Studio 中创建一个新的 ASP.NET MVC 项目时,您会自动获得一个 AccountController,它使用 ASP.NET 的底层 MembershipProvider 来提供登录机制。

    即使您的最终应用程序中没有它,您也可以将它用作临时解决方案,直到您启动并运行真正的安全机制。

    它要求您为这些 ASP.NET 服务设置一个 SQL Server 数据库,但根据您对它的熟悉程度,您可以在十分钟到几个小时内完成。

    公测结束后,您可以丢弃 AccountController 和数据库。

    【讨论】:

      【解决方案4】:

      我使用 dhulk -- 在 IIS 上使用 Windows 身份验证。该路线将允许您避免在您的应用程序中放置 any 身份验证代码。越简单越好,我想避免执行成员系统的工作,然后un - 实现它。

      【讨论】:

        【解决方案5】:

        我会创建一个简单的登录视图,它会在您的 Global.asax 文件中设置一个对 Session_Start() 进行检查的会话...就像这样:

        protected void Session_Start()
        {
            if (!Convert.ToBoolean(Session["authenticated"]))
            {
                // Redirect to the login View
            }
        }
        

        当您准备好为所有人打开您的应用程序时,只需删除 Global.asax 文件中的视图和三行代码。

        【讨论】:

        • 嗯,我想过,但是很遗憾,Application_Start 事件中没有会话状态。
        • 那用Session_Start()怎么样?
        • 刚刚检查过。您可以访问Session_Start() 上的会话对象。你去吧:)
        【解决方案6】:
        1. 使用旧的 RoleProvider 并创建一个 Beta 角色并通过 Authorize 检查它
        2. 创建您自己的 AuthorizeAttribute 并检查 IP 地址或 cookie .

        【讨论】:

          猜你喜欢
          • 2012-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多