Nouvelles Chroniques d'Amethyste

Penser au Sens, pas au Verbe

L’authentification en Asp.Net, un tour d’horizon

Poster un commentaire

ASP.NET fournit depuis toujours des outils permettant de mettre en place l’authentification dans une application Web. Les usages évoluant, ces outils ont également changés.

ASP.NET propose actuellement 4 Framework d’authentification:

  1. Asp.net Membership
  2. ASP.NET Simple Membership
  3. ASP.NET Universal Providers
  4. ASP.NET Identity

Nous allons tenter d’en faire un panorama rapide afin d’en comprendre les spécificités.

ASP.NET Membership

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
  • En théorie il est possible de changer de provider, les API étant basée sur le patron Fournisseur afin par exemple d’exploiter un repository non relationnel.
    En pratique ce n’est pas si simple car les API sont vraiment écrite en ayant une logique de base relationnelle en tête. Bref pas mal de bidouilles à faire
  • Impossible à utiliser dans un contexte OWIN. Et dites le vous, OWIN c’est le futur d’ASP.NET

 

Ce modèle est ancien, vous n’aurez aucune difficulté à trouver des informations à son sujet sur Internet. Inutile d’y passer plus de temps je pense. La documentation officielle est ici:

http://msdn.microsoft.com/en-us/library/yh26yfzy(v=VS.100).aspx

 

ASP.NET Simple Membership

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.

Donc lui aussi n’est pas un choix idéal pour une nouvelle application Web. Un tutoriel complet avec gestion d’un catcha se trouve ici:

http://www.asp.net/web-pages/tutorials/security/16-adding-security-and-membership

 

 ASP.NET universal provider

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.

Voici un tuto si vous êtes intéressés:

http://www.campusmvp.net/blog/asp-net-universal-providers-membership-and-roles-outside-sql-server

 

Je pense que ce fournisseur est essentiellement intéressant si on projette de pousser sur Microsoft Azure une application existante.

 

ASP.NET identity

Pour un nouveau projet, c’est certainement la meilleure solution. J’ai justement commencé l’écriture de tutoriels pour vous aider. Voici le premier déjà, le deuxième est en cours, mais il est un peu long:

  1. https://amethyste16.wordpress.com/2014/07/04/mettre-en-place-lauthentification-avec-visual-studio-2013-partie-i/
  2. https://amethyste16.wordpress.com/2014/08/23/mettre-en-place-lauthentification-avec-visual-studio-2013-partie-ii/

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 vous ignorez ce qu’est OWIN, fouillez un peu mon blog, j’ai écrit des tas d’articles à ce sujet et en particulier:

https://amethyste16.wordpress.com/2014/04/08/premier-contact-avec-owin/

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: SharePointt, 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.

 

 

 

Bibliographie

http://www.asp.net/identity/overview/getting-started/introduction-to-aspnet-identity

http://www.codeproject.com/Articles/689801/Understanding-and-Using-Simple-Membership-Provider

http://maxlab.fr/2014/05/gerer-lauthentification-dune-application-javascript/

 

 

 

 

 

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s