11 pour les développeurs Code Session : SEC317 Philippe BERAUD Consultant Architecte Direction...
-
Upload
meraud-vigneron -
Category
Documents
-
view
111 -
download
2
Transcript of 11 pour les développeurs Code Session : SEC317 Philippe BERAUD Consultant Architecte Direction...
11
pour les développeurs
Code Session : SEC317
Philippe BERAUDConsultant ArchitecteDirection TechniqueMicrosoft [email protected]
Pierre COUZYArchitecte en système d'informationsDivision Plateforme et EcosystèmeMicrosoft [email protected]
33
“Stop hard-coding security into applications and stop creating operating system (OS)-level accounts on servers. Consume these as services external to the application.”
Neil MacDonald 13 April 2006Gartner Group: Achieving agility: building blocks for a policy-driven, agile security services infrastructure
44
Le parcours virtuel Logiciels + Services Identité dans le cadre des Microsoft TechDays 2010
4 sessions pour faire un point ensembleSession SEC317 "Windows Identity Foundation pour les développeurs"
Cette session !!Session SEC207 "Les nouveautés d'AD FS 2.0"
Aujourd'hui de 14h30 à 15h30, à revivre prochainement en Session Web
Session SEC315 "The 'M'-Based System.Identity Model for Accessing Directory Services"
Lundi 8 février, de 11h00 à 12h00, à revivre prochainement en Session Web
Session ARC307 "Software + Services Identity Roadmap"Lundi 8 février, de 14h30 à 15h30, à revivre prochainement en
Session Web
55
Objectifs de la session
Compléter la session IND213 "La gestion d'identité dans l'entreprise étendue (b2b/b2c) : Geneva" animée lors des TechDays 2009
http://www.microsoft.com/france/vision/mstechdays09/Webcast.aspx?EID=388ec88d-4ce4-4c57-a055-481a25f6d6e5
Faire le point sur la version finale de Windows Identity Foundation (WIF, nom de code Zermatt Framework puis Geneva Framework)Illustrer quelques capacités clés de WIF
66
Sommaire
Vers un nouveau modèleUne rapide introduction de Windows Identity Foundation (WIF)Une illustration des capacités de WIF
77
Les deux premières lignes de toute application connectée
1. Qui êtes-vous ?
2. Qu’êtes-vous autorisés à faire ?
88
Qu’est-ce qu’une identité ?
Une identité est un ensemble d’informations à propos d’une entité, telle qu’un utilisateur
La plupart des applications travaillent avec des identitésLes informations d’identité influencent des aspects importants du comportement d’une application tels que
Déterminer ce qu’un utilisateur est autorisé à faireContrôler la façon dont l’application interagit avec l’utilisateur
99
Le problème…Travailler avec les identités est devenu trop difficile
La notion d'identité (numérique) est essentielle, mais pas simple ;-)Les applications doivent utiliser différentes technologies
d’identité dans différentes situationsKerberos au sein d’un domaine Active DirectoryUtilisateur/Mot de passe, certificat ou OTP sur l’InternetWS-Federation et SAML entre les organisationsEtc.
Il est difficile de concevoir quelque chose qui puisse fonctionner dans tous les contextes demandés par vos clients
Vous n’en avez jamais fini…Arbre de décision complexe, technologie vers scénario
Une solution tactique aujourd’hui peut bloquer une interopérabilité future
1010
Vers un nouveau modèleExternalisation de l’authentification
L’incorporation de code de gestion d'identité dans le code de base applicatif est une mauvaise idée
En termes de compétences, besoin généralement de conseils ; peu d'entre nous sont des experts de l'identitéEn termes de maintenance, les applications développées ont un couplage fort avec une technologie XEn termes de robustesse/flexibilité/interopérabilité
De nombreuses technologies d'identitéMots de passe, Kerberos, X.509, SAML, LDAP, etc.
Aucune technologie ne s’applique à l’ensemble des scénariiIntranet versus InternetCollaborateurs, partenaires, clientsApplications Web, Smart Client, Services Web (avancés)
Les détails techniques de l'authentification doivent être abstraits de la perspective du développeur d'applications
1111
Vers un autre modèle…
Au travers de l'externalisation de l’authentification, pourquoi ne pas enfin définir une approche qui puisse être utilisée dans tous ces cas ?
La notion d’identité fondée sur des revendications permet d’atteindre un tel objectifCela peut rendre la vie des développeurs d’applications et des RSSI considérablement plus simple
1212
Vers un nouveau modèleQu’allons-nous appeler une identité ?
L’identité est un ensemble de revendications (claims) faites par un fournisseur d’identité (l’état, la banque, l’entreprise) qui caractérise une personne ou une "chose" (entité numérique) dans le monde numérique
Peut être un identificateur, une caractéristique ou autre choseMè[email protected], Age > 21, Employeur =
Microsoft, Rôle=Architecte, etc.
Ces revendications sont physiquement transportées dans des documents (des jetons de sécurité)Ces jetons sont délivrés par des services de distribution de jetons
(STS, ou Security Token Service)Les jetons sont utilisés par des applications, sites Web ou services
Web, qui font confiance au STS (on les appelle des Relying Parties)
1313
Vers un nouveau modèleExternalisation de l’authentification et revendications
confiance
Fournisseur d’identité
Consommateur d’identité
Utilisateur
Service de jetons de sécurité
Librairie d'identité
Application
5. Recherche des revendications, transformation
pour l'application
Client de fédération
(optionnel) 6. Envoi des revendications
1. Lecture de la politique
2. Le
cture
de la p
olitique
4. Obt
ention des
reve
ndications
3. Auth
entifica
tion
Établissement d’une relation
1414
Vers un nouveau modèleExternalisation de l’authentification et revendications
Établissement d’une relation fondée sur les métadonnées de
fédération
confiance
Fournisseur d’identité
Consommateur d’identité
Utilisateur
Windows Identity
Foundation
Application
AD FS 2.0
WindowsCardSpace
2.0
Magasin d'attributs
SQL
Active Directory
6. Envoi des revendications
1. Lecture de la politique
2. Le
cture
de la p
olitique
4. Obt
ention des
reve
ndications
3. Auth
entifica
tion
1515
Vers un nouveau modèleIntroduction de la plateforme “Geneva”
Objectif : découpler du code applicatif l'authentification utilisateur et la recherche des revendicationsComposants
Active Directory Federation Services (AD FS) 2.0 (ou un autre STS)Authentifie l’utilisateurS’appuie sur les sources/référentiels faisant autorité pour les
valeurs des revendications utilisateurÉmet les valeurs, formats et types spécifiques de revendications
requises par l’application ou le serviceWindows Identity Foundation (WIF)
Valide le jeton de sécurité émis par le STSExtrait les revendications et les met à disposition de l’application ou
du service
http://www.microsoft.com/geneva
1616
DémoL'identité fondée sur les revendications : c'est FACILE !
1717
Sommaire
Vers un nouveau modèleUne rapide introduction de Windows Identity Foundation (WIF)Une illustration des capacités de WIF
1818
Windows Identity Foundation (WIF) 1.0
Framework pour .NET 3.5 au même titre que WCF, WF, et WPFUn modèle de développement pour les revendications
Modèle objet des revendications intégré avec les APIs Identité .NETModèle de programmation unifié et cohérent pour ASP.NET et WCFModèle piloté par configuration
Framework pour le développement de services de jetons de sécurité (STS) personnalisés avec un minimum d'effortsOutils pour la configuration automatique des applications et
services pilotée par les métadonnéesFondés sur les standards OASIS WS-Federation et WS-Trust
Et bien plus encore…
1919
Windows Identity Foundation (WIF) 1.0Composantes du Framework
Modèle objet unifié (ASP.NET vs. WCF) pour les revendicationsUtilitaire FedUtilEnsemble de modules HTTP .NET pour le traitement des jetons
de sécurité, la gestion des sessions, etc.Service c2WTS (Claims to Windows Token Service)Contrôles ASP.NETAPIs pour l'émission de jetons et de cartes d'informationSupport de la plateforme Windows AzureIntégration à Visual Studio
2020
Windows Identity Foundation (WIF) 1.0Intégration Visual Studio
Outils pour établir et maintenir des relations de confianceModèles Visual Studio pour le développement de sites et de
services Web fondés sur les revendicationsContrôles ASP.NET prêts à l'emploi
2121
Windows Identity Foundation (WIF) 1.0Modèles Visual Studio
Disponibles en C#File New Web Site…
ASP.NET Security Token Service Web SiteClaims-aware ASP.NET Web SiteClaims-aware WCF ServicesWCF Service Token Service
Projets thinktecture STS Starter Kit 1.0 Beta 1 et RP Starter Kit 0.92
http://startersts.codeplex.com/Construits sur WIF 1.0Support des fournisseurs ASP.NET , des clients Silverlight, pont avec OpenID, etc.
2222
Windows Identity Foundation (WIF) 1.0Contrôles ASP.NET
2 contrôles standards complètement intégrés avec le pipeline WIF et FedUtil
FederatedPassiveSignInSignInStatus
2 contrôles DPE additionnelsSecurityTokenVisualizerControl (STVC)
http://code.msdn.microsoft.com/TokenVisualizerCtrl ClaimsDrivenModifierControl (CDMC)
http://code.msdn.microsoft.com/ClaimsDrivenControl
2323
Sommaire
Vers un nouveau modèleUne rapide introduction de Windows Identity
Foundation (WIF)Une illustration des capacités de WIF
2424
Comment découvrir WIF 1.0 ?
Microsoft propose une application d’exemple couvrant notamment les thématiques suivantes
Externalisation de l'authentification et obtention des revendications Consommation des revendicationsAutorisationsInvocation de services WCFMise en œuvre d'une STS PersonnaliséDélégation d’identité
http://code.msdn.microsoft.com/FabrikamShippingNous allons parcourir ensemble une partie de cette application
2525
Obtention des revendicationsChallenge
L'authentification fournit un identifiant, peut-être des groupes… les applications nécessitent plus d’informations sur l’utilisateur Aujourd'hui, les applications doivent faire des requêtes DS ou
DB pour obtenir les revendications utilisateur additionnellesLes applications doivent disposer de code vis-à-vis des différentes interfaces DS et DB, reflet de l’hétérogénéité des référentielsLes applications ne sont généralement pas autorisées pour requêter dans une autre organisation ! ;-)Les applications hébergées (c.à.d. " dans le nuage") ne sont pas forcément connectées au(x) référentiel(s) d'entreprise "sur site"
2626
Obtention des revendications Mise en œuvre
EtapesUtiliser FedUtil pour se fédérer avec le STS Adatum Corporation
BénéficesAucune requête DS ou DB n’est nécessaire dans l'application Fabrikam ShippingAuthentification unique entre les applications, et à travers les pare-feuMise en oeuvre facilitée d'une fédération entre Adatum Corporation et Fabrikam pour l'accès au service Fabrikam Shipping
2727
Obtention des revendicationsModules HTTP de WIF
HTTP Module(s) dans le pipeline ASP.NET de l'applicationIls prennent le soin d'exposer la politique, de gérer les
redirections de protocole, d'établir des sessions, etc.WSFederationAuthenticationModule (FAM)
Implémente le protocole WS-Federation et ses redirections
SessionAuthenticationModulePrend en charge la gestion des sessions indépendamment du protocole de "sign-in"
ClaimsPrincipalHttpModuleFournit un "hook" pour injecter des revendications dans le principal courant
2828
Obtention des revendications Fedutil
Mise à jour du fichier web.configDéclaration du module WSFederationAuthenticationModule (FAM)
Prise en charge de WS-Fed Passive et constitution d'un ClaimsPrincipal
Déclaration du module SessionAuthenticationModuleGestion (agnostique vis-à-vis des protocoles) des sessions
Consommation des métadonnées du STS pour les revendicationsDéfinition des informations de nom et de rôle pour les interfaces bien
connues IPrincipal et IIdentity
Création des métadonnées de fédération pour l'applicationMise à disposition sous FederationMetadata\2007-06 pour consommation par le STS…
https://<host>/FederationMetadata/2007-06/FederationMetadata.xml
2929
Obtention des revendications Architecture de WIF
Pipeline de traitement ASP.NET en première approche
ASP.NETHosting
Layer
ASP.NET Application Code
ClaimsPrincipal
Claims Authentication Manager
Session Authentication Module
Claims Authorization Manager
Security Token Handler
WS-Federation Authentication Module
Request
3333
Obtention des revendications Modèle de revendications dans WIF
Et mes (Generic/Windows)Principal/((Generic/Windows)Identity dans tous cela ?
IClaimsIdentity étend IIdentity, en y ajoutant le support des revendicationsCollection de revendicationsRevendications Name et Role pour la compatibilité arrièrePeut inclure la chaîne de délégué (Actor) pour les scénarios de ActAs
IClaimPrincipal étend IPrincipal, en y ajoutant une collection de ClaimsIdentity
public interface IClaimsIdentity : IIdentity { ClaimCollection Claims { get; } string NameClaimType { get; set; } ICollection<string> RoleClaimTypes { get; } string Label { get; set; } IClaimsIdentity Actor { get; set; } SecurityToken BootstrapToken { get; set; }}
public interface IClaimsPrincipal : IPrincipal { ClaimsIdentityCollection Identities { get; }}
3434
Obtention des revendications Modèle de revendications dans WIF
Propriétés clé de la classe ClaimClaimType, Value, ValueType, IssuerLes chaînes permettent d'éviter les complexités de la désérialisation
public class Claim { // some members omitted for brevity public virtual string ClaimType { get; } public virtual string Value { get; } public virtual string ValueType { get; } public virtual IDictionnary<string, string> Properties; public virtual string Issuer { get; } public virtual string OriginalIssuer { get; } public virtual string IClaimIdentity Subject { get; }}
IClaimsPrincipal
IClaimsIdentityIClaimsIdentity
ClaimClaimType = “Name”
Value = “Bob”Issuer = “WLID”
Subject
ClaimClaimType = “Name”
Value = “Bob”Issuer = “WLID”
Subject
ClaimClaimType = “Name”
Value = “Bob”Issuer = “WLID”
Subject
3535
Obtention des revendications Consommation des revendications dans le code
IClaimsIdentity id =((IClaimsPrincipal)Thread.CurrentPrincipal).Identities[0];
// you can use a simple foreach loop to find a claim...string usersEmail = null;foreach (Claim c in id.Claims) { if (c.ClaimType == System.IdentityModel.Claims.ClaimTypes.Email) { UsersEmail = c.Value; break; }}
// you can also use LINQ to find a claimstring usersFirstName = (from c in id.Claims where c.ClaimType == System.IdentityModel.Claims.ClaimTypes.GivenName select c).First().Value;
3636
DémoExternalisation de l'authentification, obtention et consommation des revendications
Fabrikam Shipping
3737
Personnalisation à l'aide de revendicationsMise en œuvre
EtapesUtiliser FedUtil pour créer un STS local FabrikamEnvoyer des revendications pour la personnalisationModifier l'application pour utiliser les revendicationsSe re-fédérer avec le STS Adatum Corporation
BénéficesAucun code applicatif nécessaire pour requêter des informations sur l'utilisateur d'un annuaire ou d'une base de donnéesLa transformation de revendications au niveau des STS fournit une capacité d’adaptation d’impédance pour les valeur/type de revendications
3838
Et les autorisations dans tout cela ?
Les rôles ASP.NET fonctionnent “en tant que tels”IsInRole, élément <authorization>N'importe quel type de revendication en entrée peut être utilisé comme rôle !
Pour autant, un contrôle d'accès fondé sur les revendications peut être beaucoup plus sophistiqués que RBAC avec des règles métier conditionnées par différentes notions
Plages horaires, montants de délégation, etc.
3939
Et les autorisations dans tout cela ?
WIF permet de modéliser l'information d'autorisation commeUne ressource que le sujet souhaite accéder Les actions que le sujet souhaite réaliser sur la ressourceCeci correspond à un AuthorizationContext
Cette information ou politique peut être stockée dans le fichier web.config de l'application et consommée par un point d'extensibilité de WIF : classe ClaimsAuthorizationManager
Hook pour votre logique d'autorisationDéfinition de votre implémentation de CheckAccessAjout dans le pipeline de WIF via config
[ClaimsPrincipalPermission(SecurityAction.Demand, Resource = "Directory", Operation = "Browse")]private bytes[] GetVideoFile(string path){}
4040
WIF et WCFInitialisation du pipeline WIF dans WCF
Même modèle de programmation que dans ASP.NET……mais avec une architecture de "hosting" différenteServices "Self-Hosted" :
Invoquer FederatedServiceCredentials.ConfigureServiceHost(host) dans votre ServiceHost avant de l'ouvrir (.Open)
Services activés Web :Dériver une nouvelle usine à partir de ServiceHostFactoryFaire un "Override" sur la méthode CreateServiceHost et faire l'appel à ConfigureServiceHost ci-avant en son seinDéclarer votre fabrique personnalisée dans la directive @ServiceHost de votre fichier .svc
4141
WIF et WCFLiaisons WIF
UserNameWSTrustBindingCertificateWSTrustBindingWindowsWSTrustBindingKerberosWSTrustBindingIssuedTokenWSTrustBinding
4242
DémoAutorisations, WIF et services WCF
Fabrikam Shipping
4343
Développer un STS avec WIF
WIF fournit les briques de bases pour le développement de STS personnalisé
AD FS 2.0 a été développé sur la base de WIF !
Même modèle de programmation pour l'ensemble des fonctions de "hosting"
Actif : WCFPassif : ASP.NET
Les assistants et modèles permettent de créer instantanément un squelette de STS
Parfaitement adapté à des fins de testabilité
Activités principalesDécider en qui faire confianceDécider quel type de crédentités vous accepterezFournir tout le matériel cryptographique pour la signature et le chiffrement Hook dans la logique d'extraction de revendications
4444
Délégation d’identité
1. Envoi des revendications
{ Frank}
2. Obtention des revendications
{ WFE, ActAs(John)}
John
STS
Application Web "Front-End"
3. Envoi des revendications{ John delegate WFE }
ServiceWeb "Back-End"
STS
4545
Délégation d’identité
IClaimsPrincipal
IClaimsIdentity
IClaimsIdentity
Sample FillSample Fill
ClaimClaimType = “Name”
Value = “John”Issuer = “Adatum STS”
Subject
Delegate
IClaimsIdentity
Sample FillSample Fill
ClaimClaimType = “Name”Value = “Ship. WFE”
Issuer = “Fabrikam STS”Subject
Delegate
4646
Délégation d’identité Mise en œuvre
ÉtapesCoder le service WCF BEÉcrire du code dans le FE Fabrikam Shipping pour invoquer le service BE à l'aide d’un jeton ActAsMettre en place un STS personnalisé local pour le support de la délégation d'identité
BénéficesContrôle granulaire fin de la politique de la délégationPréservation de l'identité de l'appelant d'origine
Il est possible de mapper l’utilisateur sur un compte AD "Shadow" pour l'accès aux ressources protégées via Kerberos (c2WTS)
Audit précis au niveau du service BELes accès et l’audit reflètent les identités aussi bien de l'utilisateur et
que de l'application FEModèle de programmation WCF familier
4747
DémoSTS personnalisé, délégation d'identité
Fabrikam Shipping
4848
Ce que contient l’application exemple
Externalisation de l'authentification et obtention des revendications Consommation des revendicationsAutorisationsInvocation de services WCFMise en œuvre d'une STS PersonnaliséDélégation d’identité
4949
Pour autant, nous avons à peine abordé les capacités du Framework…
…comme par exemple les thématiques suivantesMise en œuvre avec AD FS 2.0Assurance vis-à-vis du niveau de l’authentificationGestion avancée des sessionsFermes Webc2WTSTrustChannelWindows AzureEtc.
5050
Windows Identity Foundation (WIF) 1.0
En résuméFramework fondé sur les revendications et intégré à ASP.NET et WCFImplémentation des protocoles WS-Trust et WS-FederationFramework pour la définition de STS personnalisés
Pour vous aider le cas échéant à assurer les transformations nécessaires en fonction de vos spécificités
Service Revendications-vers-Jeton NTIntégration Visual Studio : outils, modèles, STS local de développementIntégration Windows Azure
5151
En guise de conclusion
Les revendications sont flexibles et puissantesUne identité fondée sur les revendications simplifie
considérablement l'authentification, le contrôle d'accès et la personnalisation dans vos applicationsLes STS sont là pour vous aider à obtenir les bonnes
informations d’identité pour vos applicationsLa plateforme “Geneva” vous offre un modèle de
programmation cohérent pour chaque situationWIF facile la vie des développeurs pour programmer avec les
revendications
5252
Evaluer WIF 1.0 aujourd'hui
Télécharger WIF depuis le centre d'évaluationhttp://msdn.microsoft.com/fr-fr/evalcenter/dd440951.aspxWIF 1.0 pour Windows Server 203 SP2
http://www.microsoft.com/downloads/details.aspx?FamilyID=BE4DB6A0-B76D-446D-810C-EA3C25B3969A&displayLang=en
WIF 1.0 pour Windows Vista, Windows 7, Windows Server 2008 (R2)http://www.microsoft.com/downloads/details.aspx?FamilyID=eb9c345f-
e830-40b8-a5fe-ae7a864c4d76&displaylang=enSDK WIF 1.0
http://www.microsoft.com/downloads/details.aspx?familyid=C148B2DF-C7AF-46BB-9162-2C9422208504&displaylang=en
Continuer l'analyse du scénario exemple Fabrikam Shippinghttp://code.msdn.microsoft.com/FabrikamShippingCf. billet http://blogs.msdn.com/vbertocci/archive/2009/06/16/announcing-fabrikamshipping-in-depth-semi-realistic-sample-for-geneva-framework.aspx
5353
Evaluer WIF 1.0 aujourd'hui
Suivre les sessions sur Channel 9Session "Windows Identity Foundation Ships!"
http://channel9.msdn.com/shows/Identity/Windows-Identity-Foundation-Ships/
Session " Windows Identity Foundation RC is Here!"http://channel9.msdn.com/shows/Identity/Windows-Identity-
Foundation-RC-is-here/
Quelques lectureshttp://www.microsoft.com/downloads/details.aspx?FamilyID=9ca5c685-3172-4d8f-81cb-1a59bdc9f7e3&displaylang=en
Livre blanc "Claims-Based Identity for Windows"Livre blanc "Microsoft Windows Identity Foundation (WIF)
Whitepaper for Developers"Guide Patterns & Practices "Claims Based Identity & Access Control"
http://msdn.microsoft.com/en-us/library/ff359115%28lightweight%29.aspx
5454
Se former à WIF 1.0
Suivre le cours en ligne sur Channel 9http://go.microsoft.com/fwlink/?LinkId=148795Identité et sites Web, Identité et services Web, fournisseur d'authentification ASP.NET et Fédération, Identité et la plateforme AzureNouveau HOL "Federated Authentication in a Windows Azure Web Role Application"
http://channel9.msdn.com/learn/courses/Azure/IdentityAzure/WIFonWAZLab/Version autonome : http://code.msdn.microsoft.com/wifwazpassive
Télécharger et suivre le Kit de formation Identité pour les développeur (PDC 2009)
http://go.microsoft.com/fwlink/?LinkId=148795
5555
Se former à WIF 1.0
Suivre les sessions du parcours "Identité" de la PDC 2009http://microsoftpdc.comSVC28 : System.Identity Model Accessing Directory ServicesPR11 : Leveraging & Extending SharePoint Identity FeaturesSVC26 : How Microsoft SharePoint 2010 was Built with WIFSVC17 : Enabling SSO to Windows Azure ApplicationsSVC02 : Windows Identity Foundation OverviewSVC19 : REST Security Services in Windows Azure using the Access Control Service
5656
Pour aller plus loin…
Documentation WIF sur MSDNhttp://msdn.microsoft.com/en-us/library/ee748484.aspx
Centre de développement MSDN Sécurité pour la gestion de l'identité
http://msdn.microsoft.com/security/aa570351.aspx
Forum MSDN "Claims based access platform (CBA), code-named Geneva"
http://social.msdn.microsoft.com/Forums/fr-FR/Geneva/threads
WeblogsBlog "Geneva" Team
http://blogs.msdn.com/card/ blog Vibro.NET
http://blogs.msdn.com/vbertocci/Blog www.leastprivilege.com
http://www.leastprivilege.com
5757
Questions / Réponses
5858
© 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED
OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Votre potentiel, notre passion TM