Comment intégrer l’authentification par fédération dans un projet MVC (Partie 1)

Cet article portant sur l'intégration de l’authentification par fédération dans un projet MVC, sera en 2 parties. La suite, demain.

        1.L’authentification par fédération

L’authentification par fédération ou l’authentification centralisée utilise la technique SSO (Single In Single On), elle permet aux utilisateurs d’accéder à plusieurs services (Sites Web ,WebServices , ..) avec un seul login. Le service de fédération envoie à l’utilisateur un token permettant d'accéder à différentes applications.

        2.La configuration

Pour l’implémentation  de la FED, ajoutez tout d’abord dans votre projet les références des DLL System.IdentityModel et System.identitymodel.services.

RefDLL

Ensuite pour activer la FED il suffit de changer le fichier de config :

Dans la partie configSections, ajoutez les références des deux DLL.

<configSections>
    <section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
  </configSections> 

Maintenant insérez dans le bloc system.webServer deux httpModules qui vont permettre à l’application d’appeler le service de la FED.

<modules runAllManagedModulesForAllRequests="true">
      <remove name="FormsAuthentication"/>
      <add name="WSFederationAuthenticationModule" type="System.IdentityModel.Services.WSFederationAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler"/>
      <add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler"/>
    </modules>

 

Le module FederationAutehtificationModule vérifie si les requêtes entrantes et les réponses sont bien valides (requête est un jeton de fédération, et la réponse sortante est un 401 qui doit être transformé en une redirection vers le STS).

La dernière étape de configuration est la mise en place de la section system.identityModel.services, Il y aura un seul élément de configuration federationConfiguration :

<federationConfiguration>
		<cookieHandler requireSsl="false" />
        <wsFederation issuer="http://stsProjet/"
                      realm="http://WSFedService/"
                      reply="http://WSFedService/"
                      passiveRedirectEnabled="true"
                      requireHttps="false" />
  </federationConfiguration>

Paramétrage :

  • RequireSsl : Ce paramètre permet de configurer les cookies (valeur true, false).
  • Issuer : Contient l’url utilisée lors de la redirection vers le serveur de la FED.
  • Realm : l’url de l’application qui demande le jeton.
  • Replay : Cet attribut définit l’endroit où le STS va mettre le jeton, dans la plupart des cas on utilise l’adresse de l’application.
  • PassiveRedirectEnabled : Si la valeur est true, l’utilisateur non authentifié sera redirigé automatiquement vers le serveur STS.

    3.Comment lancer la fédération par code C#

Il est possible de lancer l’authentification par fédération automatiquement à partir du fichier de config exemple :

<authorization>

<deny users="?" />

</authorization>

Sinon il y a un autre moyen qui permet d’appeler le serveur d’authentification par le code C#.

public ActionResult Login()
        {
            WSFederationAuthenticationModule fam = FederatedAuthentication.WSFederationAuthenticationModule;
            FederatedAuthentication.WSFederationAuthenticationModule.RedirectToIdentityProvider(fam.Issuer, fam.Reply, true);
            return View();
        }

La classe FederatedAuthentication.WSFederationAuthenticationModule permet de récupérer les paramètres de configuration de la FED.

La méthode RedirectToIdentityProvider lance l’appel à la FED, il prend en paramètre l’url du serveur d’authentification et l’url de retour après validation.

Pour récupérer l’identité de l’utilisateur connecté il suffit d’interroger le thread principal

Exemple :

var identity = (ClaimsIdentity)System.Threading.Thread.CurrentPrincipal.Identity;

 

Un commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *