У меня была такая же ситуация, как у вас, когда пыталась обновить мою устаревшую систему до аутентификации OWIN, у меня также была своя собственная таблица пользователей и процесс проверки подлинности, который совершенно отличается от предложений ASP.NET Identity.
Во-первых, я попытался настроить ASP.NET Identity, но он не был отсортирован таким образом. Моя мысль Identity была болезненной и намного более сложной для настройки для устаревшего приложения, поскольку в ней много абстрактных уровней.
В конце концов я придумал решение, чтобы разделить идентификатор ASP.NET и управлять идентификацией претензии самостоятельно. Это невероятно просто, мой ниже простой демонстрационный код, как войти в систему с Owin без ASP.NET Identity, надеюсь, что помогает:
private void OwinSignIn(User user, bool isPersistence = false)
{
var claims = new[] {
new Claim(ClaimTypes.Name, user.Name),
new Claim(ClaimTypes.Email, user.Email)
};
var identity = new ClaimsIdentity(claims, DefaultApplicationTypes.ApplicationCookie);
var roles = _roleService.GetByUserId(user.Id).ToList();
if (roles.Any())
{
var roleClaims = roles.Select(r => new Claim(ClaimTypes.Role, r.Name));
identity.AddClaims(roleClaims);
}
var context = Request.GetOwinContext();
var authManager = context.Authentication;
authManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistence }, identity);
}
[HttpPost]
public ActionResult Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
return View();
var user = _userService.GetByEmail(model.Email);
if (user != null && (user.Password == model.Password))
{
OwinSignIn(user, model.RememberMe);
return RedirectToLocal(returnUrl);
}
ModelState.AddModelError("", "Invalid email or password");
return View();
}
Возможно, это помогает ... http://stackoverflow.com/a/29600215/894792? – Luke