2012-12-07 38 views
3

您有什麼方法可以讓客戶在上線前測試mvc網站/應用程序?密碼保護MVC 4應用程序 - 對於Betatesters

我有一個asp.net mvc 4 web應用程序。 beta.mydomain.com和public.mydomain.com - 在測試版上,只有擁有用戶/密碼的用戶才能訪問。但是表單身份驗證應該仍然有效。

  • 最好的解決方案是能夠將相同的代碼部署到beta和public。手段,例如不添加僅允許「管理員」用戶訪問的授權屬性。

我目前最好的解決辦法是:

  • 在IIS(7)在網站/應用程序激活我只標準身份認證
  • 改變web.config中有認證模式= 「窗口」
  • 創建一個Windows用戶,並給了他訪問應用程序(目錄)

- >>問題爲t用戶實際登錄(意味着User.IsAuthenticated返回true) - 但該應用程序在內部使用表單身份驗證。兩者都可以結合?

,我發現了一些類似的問題,但沒有真正的解決這個:

https://serverfault.com/questions/175643/how-do-i-secure-a-net-mvc-website-prior-to-launch

Password protect a directory in IIS 7 (.Net MVC 2)

IIS Password prompt for given folder ASP.NET MVC

Password protect ASP.NET web application in IIS 7.5

我這個讀了很多話題,並不能相信這是不可能的。部署Alpha/Beta版客戶端以在其上線之前對其進行測試時,您的方法是什麼?

回答

3

如果你只是想確保你的網站是在有限的觀衆(如測試用戶)訪問的最簡單的將是對現有的身份驗證的頂部添加BasicDigest認證

實現它作爲一個ActionFilterAttribute,如果你的部署方案(生產與升級等),將其添加到您的全局過濾收集呼籲保護:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    bool basicAuthenticationEnabled = true; // AppSettings etc. 

    if (basicAuthenticationEnabled) 
     filters.Add(new BasicAuthenticationAttribute()); 

    filters.Add(new HandleErrorAttribute()) 
} 

相應BasicAuthenticationAttribute類的實現可以看看這個:

public class BasicAuthenticationAttribute : ActionFilterAttribute 
{ 
    private const string Realm = "MyRealm"; 
    private const string UserName = "MyUserName"; 
    private const string Password = "MyPassword"; 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var authorizationHeader = filterContext.RequestContext.HttpContext.Request.Headers["Authorization"]; 

     if (authorizationHeader != null && authorizationHeader.StartsWith("Basic")) 
     { 
      var credentials = Encoding.ASCII.GetString(
       Convert.FromBase64String(authorizationHeader.Substring(6)) 
       ).Split(':'); 

      if (credentials[0].Equals(UserName) && credentials[1].Equals(Password)) 
      { 
       base.OnActionExecuting(filterContext); 
       return; 
      } 
     } 

     // send require authentication 
     var response = filterContext.HttpContext.Response; 
     response .StatusCode = 401; 
     response .AddHeader("WWW-Authenticate", String.Format("Basic realm=\"{0}\"", Realm)); 
     response .End(); 
    } 
} 

總之,我強烈建議使用的摘要式身份驗證,因爲它之前應用哈希函數密碼通過網絡發送,至少比安全發送明文的基本訪問認證更安全。

你可以找到一個DigestAuthorizationAttribute類和更多的信息在這裏的implememtation: