У меня есть приложение 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?