Prelude: я работаю над проектом, который имеет административную часть, API и пользовательскую часть; довольно классный c. Я решил объединить API и Admin в одном проекте, моя идея также заключалась в использовании методов Admin для API (DRY & WORE). У меня все еще есть сомнения относительно этого решения. Кстати, я не хочу, чтобы веб-сайт общался с БД напрямую, каждое задание БД будет обрабатываться через API.
Проблема: Я хочу использовать идентичность на весь проект. Когда я добавил Identity в мое приложение MVC (веб-сайт) и приложение API (также имеет MVC, Admin-API), группа контроллеров и представлений была добавлена в оба проекта. Но они полностью отличаются друг от друга, не должны ли они иметь хотя бы одинаковые модели в обоих проектах? Если мне приходилось вручную добавлять необходимые части из одного проекта в другой, почему Identity не позволяла мне выбирать, какую часть добавлять в процессе установки, поскольку эту возможность довольно легко предоставить.
Например, на MVC сторона У меня есть это действие входа в систему
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, change to shouldLockout: true
var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
}
, которое довольно ясно в модели, что я предоставлю имя пользователя и пароль. С другой стороны, на стороне API нет действия " Login ". Некоторые ExternalLogin или AddExternalLogin действия, для которых не требуется пароль. Допустим, я использовал получение токенов для проверки успешности входа в систему, а как насчет других операций Identity для установки сеансов или файлов cookie на стороне MVC? Что касается ответа API, какая часть Identity отвечает за установку необходимой информации, например, вошел ли пользователь в систему или имя пользователя?
tl & dr
Вопрос: Должен ли я установить Identity для обоих моих API и MVC приложение? Если да, то как войти в систему с помощью Identity over WebAPI?