Je suis étonné de ne pas avoir pu trouver un exemple clair de la manière d'authentifier un utilisateur depuis l'écran de connexion jusqu'à l'utilisation de l'attribut Authorize sur mes méthodes ApiController après plusieurs heures de recherche sur Google.
C'est parce que vous êtes en train de confondre ces deux concepts :
-
L'authentification est le mécanisme par lequel les systèmes peuvent identifier de manière sûre leurs utilisateurs. Les systèmes d'authentification fournissent une réponse aux questions suivantes :
- Qui est l'utilisateur ?
- L'utilisateur est-il vraiment celui qu'il prétend être ?
-
L'autorisation est le mécanisme par lequel un système détermine le niveau d'accès d'un utilisateur authentifié particulier aux ressources sécurisées contrôlées par le système. Par exemple, un système de gestion de base de données peut être conçu de manière à fournir à certaines personnes spécifiées la capacité de récupérer des informations dans une base de données mais pas la capacité de modifier les données stockées dans la base de données, tout en donnant à d'autres personnes la capacité de modifier les données. Les systèmes d'autorisation fournissent des réponses aux questions suivantes :
- L'utilisateur X est-il autorisé à accéder à la ressource R ?
- L'utilisateur X est-il autorisé à effectuer l'opération P ?
- L'utilisateur X est-il autorisé à effectuer l'opération P sur la ressource R ?
El Authorize
dans MVC est utilisé pour appliquer des règles d'accès, par exemple :
[System.Web.Http.Authorize(Roles = "Admin, Super User")]
public ActionResult AdministratorsOnly()
{
return View();
}
La règle ci-dessus n'autorisera que les utilisateurs de la Admin y Super utilisateur rôles pour accéder à la méthode
Ces règles peuvent également être définies dans le fichier web.config, à l'aide de l'option location
élément. Exemple :
<location path="Home/AdministratorsOnly">
<system.web>
<authorization>
<allow roles="Administrators"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
Cependant, avant que ces règles d'autorisation ne soient exécutées, vous devez être authentifié sur le site web actuel .
Même si elles expliquent comment traiter les demandes non autorisées, elles ne présentent pas clairement quelque chose comme un LoginController ou quelque chose du genre pour demander les informations d'identification de l'utilisateur et les valider.
A partir de là, on peut diviser le problème en deux :
-
Authentifier les utilisateurs lorsqu'ils utilisent les services de l'API Web au sein de la même application Web.
Il s'agit de l'approche la plus simple, car vous vous fiez à l'option Authentification en ASP.Net
Il s'agit d'un exemple simple :
Web.config
<authentication mode="Forms">
<forms
protection="All"
slidingExpiration="true"
loginUrl="account/login"
cookieless="UseCookies"
enableCrossAppRedirects="false"
name="cookieName"
/>
</authentication>
Les utilisateurs seront redirigés vers le site compte/login où vous rendez des contrôles personnalisés pour demander les informations d'identification de l'utilisateur, puis vous définissez le cookie d'authentification à l'aide de l'option :
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
-
Authentification multiplateforme
Ce serait le cas lorsque vous êtes l'exposition des services d'API Web uniquement au sein de l'application Web Le client peut être une autre application Web ou toute application .Net (Win Forms, WPF, console, service Windows, etc.).
Supposons, par exemple, que vous utilisiez le service API Web à partir d'une autre application Web située sur le même domaine de réseau (au sein d'un intranet). Dans ce cas, vous pourriez vous appuyer sur l'authentification Windows fournie par ASP.Net.
<authentication mode="Windows" />
Si vos services sont exposés sur Internet, vous devrez transmettre les jetons authentifiés à chaque service d'API Web.
Pour plus d'informations, consultez les articles suivants :