Следующее не является решением, которое я искал. Я хотел реализацию, отличную от progammati c, которую можно добавлять / удалять / изменять без необходимости какого-либо кодирования или развертывания (например, в IIS). Причина, по которой я решил использовать его, заключается в том, насколько просто и быстро это было реализовано. Внедрение заняло гораздо меньше времени, чем я потратил на поиск и проверку решений IIS.
Очевидно, что это не подходит для обеспечения безопасности в большинстве приложений, но для простоты реализации подходит для моего сценария. очень хорошо
Это базовая аутентификация c с использованием пользовательского ActionFilter и атрибута на контроллере.
Сначала создайте свой ActionFilter:
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 BasicAuthenticationAttribute()
{
this.Username = ConfigurationManager.AppSettings["UserName"];
this.Password = ConfigurationManager.AppSettings["Password"];
this.BasicRealm = ConfigurationManager.AppSettings["BasicRealm"];
}
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;
}
filterContext.HttpContext.Response.AddHeader("WWW-Authenticate", String.Format("Basic realm=\"{0}\"", BasicRealm ?? ""));
filterContext.Result = new HttpUnauthorizedResult();
}
}
Затем добавьте атрибут контроллера, который вы хотите защитить:
[BasicAuthentication()]
или этот, если по какой-то причине вы хотите жестко указать свое имя пользователя и пароль
[BasicAuthentication("username", "password", BasicRealm = "your-realm")]
И это все. Просто добавьте учетные данные в ваш web.config и создайте пользовательскую страницу ошибки 401, если хотите.
Полагаю, также достаточно легко добавить еще один ключ web.config, который будет действовать как флаг для активации и деактивации аутентификации. если вы хотите иметь возможность отключить его без повторного развертывания приложения