The following post http://www.khalidabuhakmeh.com/asp-net-mvc-5-authentication-breakdown has some useful examples of OWIN.
I made a mistake, the correct link is: http://www.khalidabuhakmeh.com/asp-net-mvc-5-authentication-breakdown-part-deux So, we will move on to the vb approach for the main cookie entry:
a) Cookie configuration.
Imports Microsoft.AspNet.Identity Imports Microsoft.Owin Imports Microsoft.Owin.Security.Cookies Imports Owin Partial Public Class Startup Public Sub ConfigureAuth(app As IAppBuilder) app.UseCookieAuthentication(New CookieAuthenticationOptions() With { .AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, .LoginPath = New PathString("/Account/Login")}) End Sub End Class
b) Home controller (home index is available for auth users)
<Authorize> Public Class HomeController Inherits System.Web.Mvc.Controller <HttpGet> Function Index() As ActionResult Return View() End Function End Class
c) Account controller (login)
Imports System.Security.Claims Imports System.Threading.Tasks Imports Microsoft.AspNet.Identity Imports Microsoft.AspNet.Identity.Owin Imports Microsoft.Owin.Security <Authorize> Public Class AccountController Inherits Controller Private Function AuthenticationManager() As IAuthenticationManager Return HttpContext.GetOwinContext().Authentication End Function <AllowAnonymous> Public Function Login(returnUrl As String) As ActionResult ViewBag.ReturnUrl = returnUrl Return View() End Function <HttpPost> <AllowAnonymous> <ValidateAntiForgeryToken> Public Function Login(model As LoginViewModel, returnUrl As String) As ActionResult If ModelState.IsValid Then If model.UsuarioValido Then 'Local authentication, this must be on Repository class Dim Identidad = New ClaimsIdentity({New Claim(ClaimTypes.Name, model.UserName)}, DefaultAuthenticationTypes.ApplicationCookie, ClaimTypes.Name, ClaimTypes.Role) Identidad.AddClaim(New Claim(ClaimTypes.Role, "Invitado")) AuthenticationManager.SignIn(New AuthenticationProperties() With {.IsPersistent = model.RememberMe}, Identidad) Return RedirectToAction("index", "home") End If End If Return RedirectToAction("login", model) End Function <HttpGet> Public Function LogOff() As ActionResult AuthenticationManager.SignOut() Return RedirectToAction("login") End Function End Class
d) Account model
Imports System.ComponentModel.DataAnnotations Public Class LoginViewModel <Required> <Display(Name:="Nombre de usuario")> Public Property UserName As String <Required> <DataType(DataType.Password)> <Display(Name:="Contraseña")> Public Property Password As String <Display(Name:="¿Recordar cuenta?")> Public Property RememberMe As Boolean Public ReadOnly Property UsuarioValido As Boolean Get Return Password = "secreto" 'Password Here! End Get End Property End Class
e) Index
@Imports Microsoft.AspNet.Identity @Code ViewData("Title") = "Página Inicial" End Code <h2>Bienvenido @User.Identity.GetUserName()</h2> <a href="@Url.Action("LogOff", "Account")"> Click para salir! (Cerrar Sesión) </a>
f) Login
@ModelType LoginViewModel @Code ViewBag.Title = "Iniciar sesión" End Code <h2>@ViewBag.Title.</h2> <div class="row"> <div class="col-md-8"> <section id="loginForm"> @Using Html.BeginForm("Login", "Account", New With { .ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, New With {.class = "form-horizontal", .role = "form"}) @Html.AntiForgeryToken() @<text> <h4>Utilice una cuenta local para iniciar sesión.</h4> <hr /> @Html.ValidationSummary(True) <div class="form-group"> @Html.LabelFor(Function(m) m.UserName, New With {.class = "col-md-2 control-label"}) <div class="col-md-10"> @Html.TextBoxFor(Function(m) m.UserName, New With {.class = "form-control"}) @Html.ValidationMessageFor(Function(m) m.UserName) </div> </div> <div class="form-group"> @Html.LabelFor(Function(m) m.Password, New With {.class = "col-md-2 control-label"}) <div class="col-md-10"> @Html.PasswordFor(Function(m) m.Password, New With {.class = "form-control"}) @Html.ValidationMessageFor(Function(m) m.Password) </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <div class="checkbox"> @Html.CheckBoxFor(Function(m) m.RememberMe) @Html.LabelFor(Function(m) m.RememberMe) </div> </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="Iniciar sesión" class="btn btn-default" /> </div> </div> </text> End Using </section> </div> </div> @Section Scripts @Scripts.Render("~/bundles/jqueryval") End Section