asp.net-mvc - ASP.NET MVC 5 密码保护太简单了吗?

标签 asp.net-mvc authentication asp.net-mvc-5

我有一个 ASP.NET MVC 5 Web 应用程序作为 webrole 在 Azure 上运行。

有什么方法可以轻松地用密码保护整个网站?我不需要任何注册或帐户处理,只需一个密码即可进入网站(也许还有用户名,但这不是必需的)。类似于 .htaccess 文件的东西。

我正在查看的有关 ASP.NET MVC 身份验证的每个示例都需要实现大量代码,而 Azure 似乎无法支持基本身份验证(至少不容易支持)。

最佳答案

您是对的,ASP.NET MVC 中不支持开箱即用的基本身份验证。但是,您可以使用操作过滤器轻松添加它,如here所述。 。首先,您需要创建一个操作过滤器:

public class BasicAuthenticationAttribute : ActionFilterAttribute
    {
        public string BasicRealm { get; set; }
        protected string Username { get; set; }
        protected string Password { get; set; }

        public BasicAuthenticationAttribute(string username, string password)
        {
            this.Username = username;
            this.Password = password;
        }

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var req = filterContext.HttpContext.Request;
            var auth = req.Headers["Authorization"];
            if (!String.IsNullOrEmpty(auth))
            {
                var cred = System.Text.ASCIIEncoding.ASCII.GetString(Convert.FromBase64String(auth.Substring(6))).Split(':');
                var user = new { Name = cred[0], Pass = cred[1] };
                if (user.Name == Username && user.Pass == Password) return;
            }
            var res = filterContext.HttpContext.Response;
            res.StatusCode = 401;
            res.AddHeader("WWW-Authenticate", String.Format("Basic realm=\"{0}\"", BasicRealm ?? "Ryadel"));
            res.End();
        }
    }

然后您可以使用属性来保护操作、 Controller :

[BasicAuthenticationAttribute("your-username", "your-password", BasicRealm = "your-realm")]
public class HomeController : BaseController
{
   ...
}

要保护整个网站,请将此过滤器添加到全局过滤器中:

protected void Application_Start()
{
    ...
    GlobalFilters.Filters.Add(new BasicAuthenticationAttribute("your-username", "your-password"));
    ...
}

关于asp.net-mvc - ASP.NET MVC 5 密码保护太简单了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29971693/

相关文章:

authentication - 多提供商身份验证通俗术语

c# - 使用 SharpSVN 删除本地 SVN 身份验证凭据

asp.net-mvc - 包含 MVC 5 详细信息的注册用户列表

c# - 是否可以在运行时使用两个不同的 Owin 启动文件?

asp.net - 在 MVC5 中使用现有用户数据库进行复杂的身份验证

c# - 非静态方法需要一个目标

java - 如何使用 Active Directory 或 LDAP 登录到 Business Objects

c# - 从 .net 中的另一个应用程序调用 asp mvc Controller Action?

c# - ASP.Net MVC 3 路由损坏

c# - 如何在 C# 中解码 utf 字符串