Commerce électronique Automne 2015
Les framework d’authentification Identity ◦ Gestion des utilisateurs ◦ Gestion des rôles OAuth2
ASP.NET propose actuellement 4 Framework d’authentification: ◦ Asp.net Membership ◦ ASP.NET Simple Membership ◦ ASP.NET Identity ◦ ASP.NET Universal Providers Nous allons tenter d’en faire un panorama rapide afin d’en comprendre les spécificités.
C’est le modèle historiquement proposé par Microsoft. Il est toujours d’actualité, mais pour de nouveaux projets je ne le conseille pas trop. Son architecture est basée sur: ◦ l’authentification par formulaire ◦ une base de données pour gérer les credentials des utilisateurs Le SDK embarque également une application Web que l’on peut notamment lancer depuis VS afin de gérer les rôles et les utilisateurs, ainsi qu’une API complète accessible depuis le code. Ce que l’on peut lui reprocher: ◦ le schéma de la base de donnée n’est disponible que pour SQL Server et n’est pas évolutif.
Ce modèle est relativement ancien (VS 2010 tout de même), mais curieusement il n’est pas très connu. Comme le nom le suggère, il s’agit d’une version simplifiée du précédent, mais ne cohabite pas très bien avec lui. S’il simplifie la gestion des profils utilisateurs, les autres problèmes demeurent entiers. Pour plus d’info :
Version AspNet.Identity to
Cette architecture ne se limite plus au vieux modèle basé sur des formulaires d’authentification. Il est maintenant de plus en plus fréquent de passer par une délégation de l’authentification vers divers réseaux sociaux, surtout pour les applications mobiles. L’autre apport de AspNet Identity est OWIN et le support d’OAuth2 (on troque les cookies contre les jetons).
Si on devait résumer les caractéristiques d’ASP.NET Identity: ◦ Modèle d’authentification unique Il peut s’intégrer à tous les Framework ASP.NET: MVC, Web Form, Web Page, Web Api, SignalR. Mais est aussi pleinement compatible avec les contraintes des applications mobiles. ◦ Maintenant on contrôle complètement le schéma des informations utilisateur et de profil. La personnalisation devient nettement plus facile. ◦ Par défaut, ASP.NET Identity persiste ses données dans une base de données que l’on attaque avec EF (code first). Il est alors possible de choisir tout type de conteneur: SharePoint, Windows Azure Storage Table, NoSql database… ◦ Mieux adapté au tests unitaires ◦ Gestion d’un fournisseur de rôle ◦ Outre les rôles, ASP.NET Identity est basé sur les claims qui permettent d’être plus précis quand à la représentation que l’on a d’un utilisateur qu’un simple rôle. ◦ Livré avec des fournisseurs spécifiques pour divers réseaux sociaux: Microsoft Account, Facebook, Twitter, Google… ◦ On peut déléguer les fonctionnalités de log à Windows Azure Active Directory Cette partie sera traitée dans un prochain article ◦ Intégration OWIN Plus de dépendance avec System.Web ◦ Package Nuget Le Framework est distribué via un package Nuget. C’est la nouvelle politique de Microsoft qui permet de réduire la durée du cycle de livraison des nouvelles version des outils.
En sélectionnant le modèle « Application Internet », Visual Studio crée automatiquement le modèle, la vue, le contrôleur et le filtre qui va gérer l’authentification :
La configuration de Identify passe par IdentityConfig.cs
Au départ, si on ne change rien, la base de données sera créé localement lors de l’utilisation.
Il faut ajouter/modifier la chaine de connexion dans le Web.config de l’application: Et dans IdentityModels.cs
Parfois(tout le temps) il est utile d’ajouter des informations relative à l’utilisateur, soit dans une table externe, soit dans la table des utilisateurs. Dans ce qui suit, je vais vous montrer comment intégrer les informations dans la table Identity.
Première étape est de permettre la mise à jour des données. Il faut donc ouvrir la console et activer la migration avec la commande Enable-Migrations.
Ajouter les champs dans Models\IdentityModels.cs.
Pour ajouter les champs dans la base de données il faut aller dans la console. ◦ Entrer la commande(pour chaque champs) Add-Migration « DateNaissance » Update-Database
Ajouter les informations dans la section Modèle du formulaire. (RegisterView Model in Models\Accou ntViewModels. cs)
Ajouter les informations dans la section Vue du formulaire( Views\Account\Register.cshtml)
Il ne reste plus qu’à lié la donnée entrée dans le formulaire à la donnée du modèle (Controllers\AccountController.cs).
Il est possible de définir des rôles à certains utilisateurs.
Pas suffisant….
Il est important de contrôler l’exécution de méthode ou de classe avec la méthode suivante: ◦ [Authorize(Roles = « Administrator »)]
Le fournisseur est construit sur une base d’Entity Framework code first. Il est donc possible de sauvegarder les informations utilisateurs dans tous les conteneurs pris en charge par EF, en particulier Windows Azure SQL Database. Il s’agit d’un fournisseur, pas d’une nouvelle API. Il est utilisé au sein de l’infrastructure ASP.NET membership et souffre donc des mêmes limitations. Evidemment le terme « universel » est un peu exagéré et seuls les repository de la maison sont supportés. Mais ce qui est intéressant est que le choix du repository se fait simplement en modifiant la chaîne de connexion. L’installation du provider se fait depuis un package Nuget: install-package System.Web.Providers Qui en profite pour ajouter la configuration nécessaire dans le fichier de configuration.
OAuth est un protocole libre qui permet d’autoriser une application client à utiliser l’API sécurisée d’une autre application pour le compte d’un utilisateur. L’intérêt majeur d’OAuth vient du fait que l’utilisateur n’a plus besoin de fournir ses informations d’identification à une application tierce car la connexion se passe sur l’application de l’API.
OAuth impose l’utilisation de HTTPS pour les échanges entre le client et le serveur d’autorisation du fait des données sensibles qui transitent entre les deux (jeton d’accès, éventuellement des identifiants et des mots de passe). HTTP est un protocole de communication client- serveur développé pour le World Wide Web. HTTPS n’est autre que la combinaison du HTTP avec une couche de chiffrement comme SSL ou TLS. ◦ Pratiquement tous les sites Web qui se respecte utilise maintenant https
Dans les propriétés du projet, mettez à true SSL Enabled:
Copiez l’url Https Allez dans les propriétés du projet puis l’onglet Web Copier l’url dans Project Url
On complète le contrôleur avec l’attribut RequireHttps: [RequireHttps] public class HomeController : Controller { Lancer l’application et installer le certificat local.
Voici quelques exemples Microsoft Account Provider voici un tuto, mais le principe est identique: net-mvc-identity-with-microsoft-account-authentication/ net-mvc-identity-with-microsoft-account-authentication/ Facebook Le Dashboard est ici: LinkedLn et Yahoo yahoo-linkedin-oauth-security-providers-for-owin/ yahoo-linkedin-oauth-security-providers-for-owin/ Twitter
Prenons l’exemple de Facebook Add a new App
Cliquer sur Website
Donner un nom à votre site Web
Inscrire l’adresse https de votre site Internet
Sélectionner votre nouvelle Apps
Vous aurez besoin de votre App ID et App Secret.
Dans le fichier App_start\Startup.Auth.cs, entrer vos informations et
Il ne reste plus qu’à tester… Good ça fonctionne….oui mais là, on a ajouté des champs à notre table d’utilisateur
Dans le modèle
Dans le contrôleur
Dans la vue