/ / Dead простий ASP.NET MVC 5 захист паролем? - asp.net-mvc, автентифікація, asp.net-mvc-5

Мертвий простий ASP.NET MVC 5 захист паролем? - asp.net-mvc, автентифікація, asp.net-mvc-5

У мене є веб-додаток ASP.NET MVC 5, що працює на Azure як webrole.

Є який-небудь спосіб легко захистити паролемвесь сайт? Я не хочу будь-якої реєстрації або керування обліковим записом, просто один пароль для входу на сайт (і, можливо, ім'я користувача, але це не обов'язково). Щось подібне до файлу .htaccess.

Кожен приклад аутентифікації для ASP.NET MVC, що шукає, має величезний обсяг коду для реалізації, і Azure, схоже, не може підтримувати основну автентифікацію (принаймні не так просто).

Відповіді:

12 для відповіді № 1

Ви маєте рацію, відсутня підтримка основної автентифікації в ASP.NET MVC з коробки. Однак ви можете легко додати його за допомогою фільтрів дій, як описано нижче тут. Спочатку потрібно створити фільтр дій:

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();
}
}

Тоді ви можете захистити дії, контролери за допомогою атрибутів:

[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"));
...
}