如何使用ASP.NET 5 MVC 6保护Web API

Sam*_*Ken 21 asp.net-mvc restful-authentication asp.net-web-api asp.net-core-mvc asp.net-core

我有一个很好的ASP.NET 5/MVC 6应用程序启动并运行.基本上就此而言,它只是您开始一个新项目时保持简单的正常示例应用程序.到目前为止,我可以:

  • 注册用户
  • 登录
  • 登出
  • 保护页面(强制登录等)

现在,我想要的是为应用程序提供一个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);
    }
Run Code Online (Sandbox Code Playgroud)

使用ASP.NET MVC 6保护Web API的推荐方法是什么?

Fra*_*rdo 3

我认为保护 WebApi2 的推荐方法是通过授权服务器。授权服务器负责生成令牌。但基于,作为 Katana3 一部分的基于 OAuth2 的授权服务器已从 Asp.Net 5 中删除。

我假设您的应用程序还不是实时应用程序,因为 ASP.NET 5 和 MVC 6 尚未处于最终发布阶段。因此,如果您可以更改身份/身份验证过程,则可以使用 Thinktecture 的IdentityServer3

Dominick Baier 在博客中介绍了ASP.NET 5 和 MVC 6 的安全状况以及 IdSvr3 的作用。该博客有一个指向示例 API 控制器的 Github 存储库的链接,还有一个 API 客户端。它还具有 MVC Web 应用程序的示例。它可以与 Asp.Net Identity 一起使用。

更新:

如果这对您不起作用,您可以尝试AspNet.Security.OpenIdConnect.Server。请注意,它在 Github 上有未解决的问题,因此您在使用它时可能会遇到问题。另请注意其依赖项,特别是azureadwebstacknightly

请注意,ASP.NET 5 和 MVC 6 可能处于稳定的测试版本中,但它们仍处于测试版本中。它仍然可能改变。

此外,IdSvr3 v2.0 可能是最终版本,但它是由单独的团队开发的。而且它才发布两周前,所以恕我直言,像大多数软件一样,您可能会遇到可能错过测试的事情。请注意, ASP.NET 团队上周在 Twitter 上发布了有关 IdSvr3 (v2.0) 版本的信息,因此看来他们正在支持它。