通过WebAPI调用进行Owin身份验证

时间:2018-08-11 21:24:45

标签: model-view-controller asp.net-web-api2 owin

我正在尝试在使用默认Microsoft.AspNet.Identity.UserManager和Microsoft.AspNet.Identity.Owin.SignInManager的MVC应用程序中实现自定义单一登录方案。要求是将用户名作为参数安全地传递给WebAPI控制器方法,并且如果在存储中找到该用户,则应在MVC应用程序中对其进行身份验证和登录。想法是对用户进行远程身份验证,以便在导航到MVC应用程序时不会将用户重定向到“登录”视图。

以下示例代码在应用程序内部调用时对用户进行身份验证和登录:

public ActionResult LoginLocal()
    {
        var owinCtxt = System.Web.HttpContext.Current.Request.GetOwinContext();
        var userManager = owinCtxt.GetUserManager<ApplicationUserManager>();

        var userName = "existingUser";
        var user = userManager.FindByName(userName);
        if (user == null)
        {
            throw new ArgumentException(string.Format("User \"{0}\" not found in store.", userName));
        }

        var identity = userManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);
        owinCtxt.Authentication.SignIn(identity);            

        return RedirectToAction("Index");
    }

但是,当从WebAPI控制器执行此代码时,虽然我可以看到正确创建了身份声明,但未对用户进行身份验证。检查响应时,它包含设置了Set-Cookie的{​​{1}}头,但是后续请求不提供此cookie。

处理这种情况的正确方法是什么?我是Owin身份验证管道的新手,最初认为Asp.Net.ApplicationCookie是可行的方法,但是我没有使用第三方身份验证提供程序,并且用户身份是本地的。

0 个答案:

没有答案