tutorial net mvc libro español curso asp c# .net asp.net-mvc asp.net-mvc-5

c# - curso - libro asp.net mvc 5 español



Autenticación de cookie OWIN sin identidad ASP.NET (2)

Sentí lo mismo cuando echaba un vistazo a Identidad. Agrega muchas abstracciones innecesarias y no coincide con mi caso de que tengo un sistema heredado que implementó un flujo de trabajo de autenticación personalizado.

Hay toneladas de ejemplos por ahí sobre la autenticación OWIN usando Identity y EF de forma predeterminada, lo que hace que los desarrolladores se confundan con OWIN y deben ir con Identity and Entity Framework.

Pero técnicamente, usted puede eliminar la identidad para usar solo la autenticación de cookies OWIN ( Microsoft.Owin.Security.Cookies ). El código resulta muy simple, a continuación hay un ejemplo que obtuve de mi código que elimina cosas triviales:

[HttpPost] public ActionResult Login(LoginViewModel model, string returnUrl) { var user = _userService.GetByEmail(model.Email); //check username and password from database, naive checking: //password should be in SHA if (user != null && (user.Password == model.Password)) { var claims = new[] { new Claim(ClaimTypes.Name, user.Name), new Claim(ClaimTypes.Email, user.Email), // can add more claims }; var identity = new ClaimsIdentity(claims, "ApplicationCookie"); // Add roles into claims var roles = _roleService.GetByUserId(user.Id); 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 = model.RememberMe }, identity); return RedirectToAction("Index", "Home"); } // login failed. } public ActionResult LogOut() { var ctx = Request.GetOwinContext(); var authManager = ctx.Authentication; authManager.SignOut("ApplicationCookie"); return RedirectToAction("Login"); }

Soy nuevo en ASP.NET MVC 5 y me siento muy incómodo con la autenticación de identidad + el marco de autorización. Sé que esta es una nueva característica de ASP.NET MVC framework, por lo que me gustaría aplicar una forma alternativa de implementar la autenticación en mi aplicación.

¿Es posible? Leí que podría usar el FormsAuthenticationModule . ¿Es esta una buena alternativa? ¿Cómo puedo usarlo en una aplicación basada en MVC 5?


Sin usar los métodos de seguridad de Owin: Itz My Controller Coding

[HttpPost] [ValidateAntiForgeryToken] public ActionResult Login(Employee emp, string returnUrl) { using(AdaptiveProjectEntities db = new AdaptiveProjectEntities()) { string email = emp.Email; // byte[] en = System.Text.Encoding.UTF8.GetBytes(emp.Password); //var ee = Convert.ToBase64String(en); string pass = emp.Password; bool userValid = db.Employees.Any(user => user.Email == email && user.Password == pass); if(userValid) { FormsAuthentication.SetAuthCookie(email, false); if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("///")) { return Redirect(returnUrl); } else { return RedirectToAction("Index", "Projects"); } } else { ModelState.AddModelError("", "The user name or password provided is incorrect."); } } return View(emp); } public ActionResult Logout() { FormsAuthentication.SignOut(); return RedirectToAction("Login", "Login"); } } }

Ver:

<div class="container" style="margin-right:50%"> <div class="row"> <div class="col-md-12 col-md-offset-7" style="bottom:-250px"> <div class="panel panel-default" style="margin-right:15%"> <div class="panel-heading" style="padding-bottom:5%"> <center><h3 style="margin-right:80px">Login</h3></center> @*</div>*@ @using (Html.BeginForm()) { <div class="modal-body"> @Html.AntiForgeryToken() <div class="form-horizontal" style="margin-right: 10%;"> @Html.ValidationSummary(true, "", new { @class = "text-danger" }) <div class="form-group"> @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-3" }) <div class="col-md-9"> @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control", type = "email", required = "required" } }) @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-3" }) <div class="col-md-9"> @Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "form-control", type = "password", required = "required" } }) @Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" }) </div> </div> </div> <div> <input class="btn btn-primary pull-left col-lg-offset-1" type="submit" value="Login" style="margin-left:35%" /> </div> </div> } </div> </div> </div> </div> </div> </div>