J'ai cette ancienne application MVC5 qui utilise l'authentification par formulaire sous la forme la plus simple possible. Il n'y a qu'un seul compte stocké dans web.config, il n'y a pas de rôles, etc.
<authentication mode="Forms">
<forms loginUrl="~/Login/Index" timeout="30">
<credentials passwordFormat="Clear">
<user name="some-user" password="some-password" />
</credentials>
</forms>
</authentication>
La routine de connexion appelle simplement
FormsAuthentication.Authenticate(name, password);
Et c'est tout. Y a-t-il quelque chose de similaire (en termes de simplicité) dans le noyau asp.net?
Ce n'est pas si simple :)
Dans Startup.cs, configurez la méthode.
app.UseCookieAuthentication(options =>
{
options.AutomaticAuthenticate = true;
options.AutomaticChallenge = true;
options.LoginPath = "/Home/Login";
});
Ajoutez l'attribut Authorize pour protéger les ressources que vous souhaitez sécuriser.
[Authorize]
public IActionResult Index()
{
return View();
}
Dans la méthode d'action Home Controller, Login Post, écrivez la méthode suivante.
var username = Configuration["username"];
var password = Configuration["password"];
if (authUser.Username == username && authUser.Password == password)
{
var identity = new ClaimsIdentity(claims,
CookieAuthenticationDefaults.AuthenticationScheme);
HttpContext.Authentication.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(identity));
return Redirect("~/Home/Index");
}
else
{
ModelState.AddModelError("","Login failed. Please check Username and/or password");
}
Voici le dépôt github pour votre référence: https://github.com/anuraj/CookieAuthMVCSample
Pour ajouter à la réponse d'Anuraj - un certain nombre de classes sont obsolètes pour .Net Core 2. Pour info:
Startup.cs - Dans ConfigureServices:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(o => o.LoginPath = new PathString("/account/login"));
Startup.cs - Dans Configure:
app.UseAuthentication();
Dans votre compte/méthode de contrôleur de connexion/partout où vous effectuez votre authentification:
var claims = new[] { new Claim(ClaimTypes.Name, "MyUserNameOrID"),
new Claim(ClaimTypes.Role, "SomeRoleName") };
var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
await context.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(identity));
// Do your redirect here