我有一个很好的 ASP.NET 5 / MVC 6 应用程序正在运行。本质上,出于此目的,它只是您在启动新项目时获得的普通示例应用程序,以保持简单。到目前为止我可以:
- 注册用户
- Login
- Logout
- 保护页面(强制登录等)
现在,我想要的是为应用程序提供一个 API 机制来登录并获取身份验证令牌。具体来说,我正在开发两款移动应用程序进行测试,一款使用 Angular / Cordova,一款使用 Xamarin。
我到处寻找,但似乎还找不到一个例子来说明如何实现这项工作。到目前为止,我找到的每个示例都假设用户将通过正常的 Web 表单/发布周期登录,然后被带到加载 Angular 的页面,并且身份验证令牌已经在浏览器中。
MVC 控制器的 AccountController.cs 文件中的相关代码如下。我最终想要的是等效的功能,但来自纯 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);
}
使用 ASP.NET MVC 6 保护 Web API 的推荐方法是什么?