web-dev-qa-db-fra.com

Authentification personnalisée et ASP.NET MVC

J'ai une application Web interne en cours de construction dans ASP.NET 4. Nous sommes coincés avec l'utilisation d'une API d'authentification construite par une autre équipe. Si un utilisateur du site est authentifié avec succès pour le site, je voudrais lui donner accès à l'ensemble du site.

Dans ASP.NET Jours WebForm que je venais d'utiliser pour garder un objet utilisateur personnalisé en session. Si cet objet était nul, je savais que l'utilisateur n'était pas authentifié. Existe-t-il une méthode similaire mais améliorée pour cela dans MVC. Je ne veux pas avoir à créer mon propre fournisseur du modèle d'adhésion ASP.NET si possible. Quelle est la manière la plus simple de procéder?

27
BuddyJoe

Vous pouvez utiliser Forms Authentication en conjonction avec Authorize attibute comme suit,

Pour restreindre l'accès à une vue:

Ajoutez l'attribut AuthorizeAttribute à la déclaration de méthode d'action, comme illustré ci-dessous,

[Authorize]
public ActionResult Index()
{
    return View();
}

Configuration de l'authentification par formulaire dans web.config

<authentication mode="Forms">
     <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>

Connexion après l'action: définir le cookie d'authentification si l'utilisateur est valide

[HttpPost]
public ActionResult Login(User model, string returnUrl)
{
        //Validation code

        if (userValid)
        {
             FormsAuthentication.SetAuthCookie(username, false);
        }
}

Déconnexion Action:

public ActionResult LogOff()
{
    FormsAuthentication.SignOut();
    return RedirectToAction("Index", "Home");
}
44
Jatin patil

Vous voulez probablement avoir un filtre d'autorisation personnalisé . Voici un exemple: Filtres personnalisés dans MVC . Vous pouvez ensuite appliquer ce filtre globalement au démarrage de l'application (en utilisant RegisterGlobalFilters).

public class LegacyAuthorize : AuthorizeAttribute
{
  public override void OnAuthorization(HttpActionContext actionContext)
  {
    if (HttpContext.Current.Session["User"] == null)
      base.HandleUnauthorizedRequest(actionContext);
  }
}

Ensuite, dans votre global.asax vous auriez quelque chose comme ceci:

GlobalFilters.Filters.Add(new LegacyAuthorize());
5
volpav

Vous pouvez essayer avec quelque chose comme ceci:

FormsAuthentication.SetAuthCookie(username, rememberMe);

pour définir le cookie pour l'utilisateur authentifié, utilisez simplement le [Authorize] attribut sur le contrôleur ou l'action nécessitant une authentification.

Essayez de googler sur le sujet pour plus d'informations, vous trouverez beaucoup de choses sur l'authentification et l'autorisation dans MVC.

4
Daniele

Tout ce que vous pouvez faire sous des formes que vous pouvez faire dans MVC, il suffit de définir la variable de session dans l'action de connexion du contrôleur.

Ou vous pouvez le faire: Dans l'action de connexion, ajoutez formsauthentication.setauthcookie("username")

Après cela, toute action avec le mot-clé [Autoriser] permettra à l'utilisateur actuel d'entrer.

1
Solmead