/ / Dead dead ASP.NET MVC 5 ochrona hasłem? - asp.net-mvc, uwierzytelnianie, asp.net-mvc-5

Martwe proste zabezpieczenie hasłem ASP.NET MVC 5? - asp.net-mvc, uwierzytelnianie, asp.net-mvc-5

Mam aplikację sieci web ASP.NET MVC 5 działającą na platformie Azure jako webrole.

Czy istnieje sposób na łatwe zabezpieczenie hasłemcała strona internetowa? Nie chcę żadnej rejestracji ani obsługi konta, tylko jedno hasło do wejścia na stronę (i być może nazwę użytkownika, ale nie jest to wymagane) .Coś podobne do pliku .htaccess.

Każdy przykład uwierzytelnienia dla ASP.NET MVC, na które patrzę, zawiera ogromną ilość kodu do zaimplementowania, a Azure nie obsługuje podstawowego uwierzytelniania (przynajmniej nie jest to łatwe).

Odpowiedzi:

12 dla odpowiedzi № 1

Masz rację, nie ma obsługi Basic Uwierzytelnianie w ASP.NET MVC po wyjęciu z pudełka. Można go jednak łatwo dodać za pomocą filtrów akcji, zgodnie z opisem tutaj. Najpierw musisz utworzyć filtr akcji:

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

Następnie możesz chronić działania, kontrolery za pomocą atrybutów:

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

Aby chronić całą witrynę, dodaj ten filtr do filtrów globalnych:

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