Как защитить веб-API с помощью ASP.NET 5 MVC 6
У меня есть хорошее приложение ASP.NET 5 / MVC 6 и работает. По сути, для этой цели это просто обычный пример приложения, которое вы получаете, когда начинаете новый проект, чтобы упростить его. Пока что я могу:
Зарегистрировать пользователяАвторизоватьсяВыйтиЗащитить страницу (принудительный вход в систему и т. Д.)Теперь я хотел бы предоставить механизм API для приложения, чтобы войти в систему и получить маркер аутентификации. В частности, я работаю над двумя мобильными приложениями, одно из которых использует Angular / Cordova, а другое - Xamarin.
Я выглядел высоко и низко, и я пока не могу найти пример, который показывает, как сделать эту работу. Каждый пример, который я пока нахожу, предполагает, что пользователь войдет в систему с помощью обычного веб-формы / цикла публикации, а затем перейдет на страницу, которая загружает Angular, и этот токен аутентификации уже находится в браузере.
Соответствующий код из файла AccountController.cs для контроллера MVC приведен ниже. В конечном итоге я хочу получить эквивалентную функциональность, но от чистого вызова API, который позволяет Angular / Xamarin отправлять ему имя пользователя / пароль и возвращать токен аутентификации или сбой.
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
ViewBag.ReturnUrl = returnUrl;
if (ModelState.IsValid)
{
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, set shouldLockout: true
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
if (result.Succeeded)
{
return RedirectToLocal(returnUrl);
}
if (result.RequiresTwoFactor)
{
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
}
if (result.IsLockedOut)
{
return View("Lockout");
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return View(model);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
Каков рекомендуемый способ защиты веб-API с помощью ASP.NET MVC 6?