On m'a confié la tâche de modifier une application ASP.NET MVC de telle manière que surfer sur myurl? Username = xxxxxx se connecte automatiquement à l'utilisateur xxxxxx, sans demander de mots de passe.
J'ai déjà dit très clairement que c'est une idée terrible pour de nombreuses raisons et scénarios liés à la sécurité, mais les responsables sont déterminés. Le site ne serait pas accessible au public.
Donc: existe-t-il un moyen de se connecter sans mot de passe, par exemple en étendant Microsoft.AspNet.Identity.UserManager et en modifiant AccountController?
Du code:
var user = await _userManager.FindAsync(model.UserName, model.Password);
if (user != null && IsAllowedToLoginIntoTheCurrentSite(user))
{
user = _genericRepository.LoadById<User>(user.Id);
if (user.Active)
{
await SignInAsync(user, model.RememberMe);
_userManager contient une instance d'un Microsoft.AspNet.Identity.UserManager.
et SignInAsync ():
private async Task SignInAsync(User user, bool isPersistent)
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var identity = await _userManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
if (user.UserGroupId.IsSet())
user.UserGroup = await _userManager.Load<UserGroup>(user.UserGroupId);
//adding claims here ... //
AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent }, new CustomClaimsIdentity(identity));
}
AuthenticationManager serait OwinSecurity.
Il vous suffit d'utiliser le gestionnaire d'utilisateurs pour rechercher l'utilisateur par son nom. Si vous avez un enregistrement, connectez-vous-le.
public ActionResult StupidCompanyLogin()
{
return View();
}
[HttpPost]
//[ValidateAntiForgeryToken] - Whats the point? F**k security
public async Task<ActionResult> StupidCompanyLogin(string name)
{
var user = await UserManager.FindByNameAsync(name);
if (user != null)
{
await SignInManager.SignInAsync(user, true, true);
}
return View();
}