您有什么方法可以让客户在上线前测试mvc网站/应用程序?
我有一个asp.net mvc 4 Web应用程序。 beta.mydomain.com和public.mydomain.com - 在测试版中,只有拥有用户/密码的人才能访问。但表单身份验证应该仍然有效。
我目前最好的解决方案是:
- >> 问题是用户实际上已登录(表示User.IsAuthenticated返回true) - 但App内部使用表单身份验证。两者都可以合并吗?
我发现了一些类似的问题,但没有真正的解决方案:
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进行测试之前,您的方法是什么?
答案 0 :(得分:3)
如果您只是想确保您的网站可供有限的受众群体访问(例如测试用户),最简单的方法是添加 Basic或Digest身份验证现有身份验证的顶部。
将其实现为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
课程的实施和更多信息: