Я использую следующий код на сайте MVC5:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel loginModel) {
if (ModelState.IsValid) {
var authenticated = FormsAuthentication.Authenticate(loginModel.UserName, loginModel.Password);
if (authenticated) {
FormsAuthentication.SetAuthCookie(loginModel.UserName, true);
return RedirectToAction("AdminPanel");
}
ModelState.AddModelError("", "The username and password combination were incorrect");
}
return View(loginModel);
}
Что вызывает следующее предупреждение:
System.Web.Security.FormsAuthentication.Authenticate(строка, строка) ' устарел: "Рекомендуемая альтернатива - использовать Членство API, например Memberhip.ValidateUser. Для получения дополнительной информации см. http://go.microsoft.com/fwlink/?LinkId=252463. '
Сначала отказ от ответственности - я один из тех разработчиков, которым нравится постоянно следить за вещами, и я предпочитаю полностью избегать предупреждений в VS. Однако в этом конкретном случае я использую чрезвычайно примитивную аутентификацию, которая поступает непосредственно из web.config следующим образом:
<authentication mode="Forms">
<forms loginUrl="~/account/login" timeout="2880" slidingExpiration="true" name=".ASPXFORMSAUTH">
<credentials passwordFormat="SHA1">
<user name="MyUserName" password="a-big-long-password-hash"/>
</credentials>
</forms>
</authentication>
В этом проекте нет абсолютно никаких требований для входа - использование базы данных является излишним, и нет необходимости в распределенном входе; в основном, сохранение деталей в web.config является самым идеальным решением, и, вероятно, будет только один пользователь для каждого приложения. Я, без сомнения, отвлечу код аутентификации от контроллера (используя DI/IoC), но я все еще намерен использовать объект FormsAuthentication для аутентификации против деталей в web.config.
Пока я полностью осведомлен о поставщиках членства, DotNetOpenAuth и новой (но довольно ужасной) модели аутентификации на основе OWIN, приведенный выше код более чем достаточен.
Первый вопрос: почему FormsAuthentication была устаревшей, когда это вполне допустимый вариант использования? Я понимаю, что FormsAuthentication является запечатанным черным ящиком, его трудно проверить, а код, стоящий за ним, зависит от домена, но в этом конкретном экземпляре (где я хочу читать данные непосредственно из раздела web.config), кажется, безумие написать поставщик членства или пользовательскую службу проверки подлинности?
Второй вопрос. Если я чего-то не хватает, новая модель OWIN предназначена для распределенной аутентификации и не подходит для системы безопасности на уровне предприятия. Из многих сообщений в блогах, официальных документов и сообщений, которые я прочитал, также кажется, что он еще неполный. Правильно ли я в своих предположениях? Является ли OWIN будущим всех систем безопасности, или я должен продолжать писать на заказ системы безопасности, более подходящие для моих клиентов?