gpt4 book ai didi

asp.net-mvc - 密码保护 MVC 4 应用程序 - 对于 Betatesters

转载 作者:行者123 更新时间:2023-12-01 14:44:27 26 4
gpt4 key购买 nike

您有哪些方法可以让客户在上线前测试 mvc 网站/应用程序?

我有一个 asp.net mvc 4 网络应用程序。 beta.mydomain.com 和 public.mydomain.com - 在测试版中,只有拥有用户名/密码的人才能访问。但是表单例份验证应该仍然有效。

  • 最好的解决方案是能够将相同的代码部署到测试版和公开版。意思是,例如不添加仅允许“管理员”用户访问的授权属性。

我目前最好的解决方案是:

  • 在网站/应用程序的 IIS (7) 中,我只激活了标准身份验证
  • 将 web.config 更改为具有身份验证模式="windows"
  • 创建一个 Windows 用户并授予他访问应用程序(目录)的权限

->> 问题是用户实际上已登录(意味着 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 以在上线前对其进行测试时,您采用什么方法?

最佳答案

如果您只想确保有限的受众(例如测试用户)可以访问您的网站,最简单的方法是添加 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();
}
}

无论如何,我强烈建议使用 Digest 身份验证,因为它在通过网络发送密码之前将哈希函数应用于密码,这至少比基本访问身份验证安全一点,发送明文。

您可以在此处找到 DigestAuthorizationAttribute 类的实现和更多信息:

关于asp.net-mvc - 密码保护 MVC 4 应用程序 - 对于 Betatesters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13768225/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com