Как защитить веб-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?

Ответы на вопрос(2)

Ваш ответ на вопрос