Я использую следующий код на сайте 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(string, string)» устарела: «Рекомендуемой альтернативой является использование API членства, например Membership.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 и новой (но довольно ужасной imo) модели аутентификации на основе OWIN, приведенный выше код более чем достаточен.
Первый вопрос. Почему FormsAuthentication устарела, когда это вполне допустимый вариант использования? Я понимаю, что FormsAuthentication — это запечатанный черный ящик, его трудно протестировать, а код, стоящий за ним, зависит от домена, но в данном конкретном случае (где я хочу прочитать подробности непосредственно из раздела web.config) это кажется безумием. написать поставщика членства или пользовательскую службу проверки подлинности?
Второй вопрос. Если я что-то не упустил, новая модель OWIN предназначена для распределенной аутентификации и не подходит для ролевой системы безопасности уровня предприятия. Из многих сообщений в блогах, официальных документов и сообщений SO, которые я прочитал, также кажется, что это все еще неполно. Прав ли я в своих предположениях? Является ли OWIN будущим всех систем безопасности, или мне следует продолжать писать индивидуальные системы безопасности, более подходящие для нужд моих клиентов?