Amine Mostefai's Blog

Architecture is my passion :)

Amine

Hi and welcome to my blog. I share in this space a lot of posts related to software architecture, and software development. Content is mainly related to .NET CORE development, Angular, Sharepoint, Azure and Office 365. I hope that my articles are helpful and that you enjoy using them 😉

Sharepoint 2010 se connecte à distance mais pas en local

Un problĂšme assez intriguant pourrait subvenir avec Sharepoint 2010 aprĂšs l’ajout d’une nouvelle application et sa configuration sur une entĂȘte de hĂŽte: j’arrive Ă  me connecter au portail Ă  partir d’un ordinateur distant mais pas Ă  partir de l’ordinateur local. La consĂ©quence est plus grave que ça en a l’air, les comptes de services n’accĂšdent pas non plus aux contenus du portail et par exemple, l’application de recherche n’arrive pas Ă  indexer. AprĂšs avoir suspectĂ© le DNS – ce qui Ă©tait faux – , le problĂšme Ă©tait tout autre. Pour des raisons de sĂ©curitĂ©, Windows 2003 et Windows 2008 activent par dĂ©faut le “loopback check” ce qui interdit Ă  des applications rĂ©fĂ©rencĂ©es par le DNS d’ĂȘtre accĂ©dĂ©es par le hĂŽte de l’application, pour plus d’informations, consultez cet article. Heureusement, qu’aprĂšs quelques petites recherches je suis tombĂ© sur ce post. L’astuce est de dĂ©sactiver le lookup check ou de dĂ©clarer les sites sur lesquels on ignore ce procĂ©dĂ©. Pour ce, on doit avoir accĂšs Ă  la base de registre de l’ordinateur oĂč Sharepoint est installĂ©. Pour dĂ©sactiver le lookup check: Lancer PowerShell en mode administrateur ExĂ©cutez la commande suivante : New-ItemProperty HKLM:\System\CurrentControlSet\Control\Lsa -Name "DisableLoopbackCheck" -Value "1" -PropertyType dword Pour dĂ©clarer les sites Ă  ignorer en cas de lookup check : Ouvrez l’éditeur de registres Trouvez la clĂ© “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0” Cliquez avec le bouton droit sur le noeud “MSV1_0” Cliquez sur Nouveau –> Valeur de chaines multiples Entrez “BackConnectionHostName” comme nom de la clĂ© Modifiez la clĂ© en entrant la liste des sites Ă  ignorer, par exemple portail.masociete.dz Cliquez sur OK Que vous ayez fait la premiĂšre manipulation ou la deuxiĂšme, vous devez redĂ©marrer le serveur pour que les changements soient pris en compte. Enjoy

Tutoriel 9.1–Création d’une application ASP.NET sécurisée

L’objectif de ce tutoriel (appliquant le module 9) est d’apprendre Ă  utiliser les fournisseurs SQL fournis par ASP.NET pour la mise en place d’une application sĂ©curisĂ©e. Etape 1 : CrĂ©ation de la base de donnĂ©es L’objectif de cette Ă©tape est de crĂ©er la base de donnĂ©es ASPNETDB permettant de rĂ©utiliser une base de donnĂ©es dans les tĂąches quotidiennes d’administration sans avoir Ă  rĂ©Ă©crire les fournisseurs. Lancez l’explorateur de Windows Allez jusqu’au dossier d’installation du .NET Framework qui est dans le dossier d’installation de Windows Localisez la derniĂšre version du .NET Framework Ouvrez le rĂ©pertoire de la derniĂšre version Localisez le programme « aspnet_regsql » et lancez-le, un assistant apparaĂźt Cliquez sur « Suivant » Cochez « Configurer SQL Server pour les services d’application »     Cliquez sur « suivant » Entrez le nom du serveur SQL dans lequel sera installĂ©e la base Dans « Base de donnĂ©es », laissez « par dĂ©faut » ss Cliquez sur « Suivant » deux fois L’assistant devrait s’exĂ©cuter sans problĂšmes Ouvrez SQL Server Management Studio Remarquez la prĂ©sence d’une nouvelle base de donnĂ©es appelĂ©e « aspnetdb » Etape 2 : PrĂ©paration de l’Application Le but de cette Ă©tape est de prĂ©parer le cadre de l’application. L’application sera composĂ©e de quatre pages : accueil, login et deux autres pages localisĂ©es dans deux rĂ©pertoires : « Secure » et « Admin » oĂč « Admin » est un sous-rĂ©pertoire de « Admin ». Les rĂšgles sont les suivantes : tous les utilisateurs connectĂ©s accĂšderont au contenu du rĂ©pertoire « Secure » tandis que le rĂ©pertoire « Admin » ne pourra ĂȘtre accĂ©dĂ© que par les utilisateurs appartenant au rĂŽle « Admin ». Le site sera structurĂ© comme suit : un menu en haut contenant les liens des diffĂ©rents sites et un pied en bas contenant le nom de l’utilisateur en cours et un lien pour se connecter / dĂ©connecter. Ouvrez VS 2012 CrĂ©ez une nouvelle applications ASP.NET vide appelĂ©e « TestComptes » Dans le projet, crĂ©ez un rĂ©pertoire appelĂ© « Secure » Dans le rĂ©pertoire «Secure », crĂ©ez un sous-rĂ©pertoire appelĂ© « Admin » Ajoutez une page maĂźtre et nommez-la « Main.master » Ouvrez « Main.master » en mode source Dans l’attribut classe de la div, entrez « content » Ajoutez une balise « header » avant la « div » Ajoutez une balise « footer » dans la div Ajoutez une balise « ul » dans « header » et une autre balise « ul » dans footer Ajoutez trois Ă©lĂ©ments « li » dans la premiĂšre « ul » et deux balises « li » dans la deuxiĂšme « ul » Ouvrez « Main.master » en mode design Glissez un composant « HyperLink » dans chacun des Ă©lĂ©ments de la liste Dans la deuxiĂšme liste « ul », glissez un composant « LoginName » dans la premiĂšre « li » Dans la deuxiĂšme liste « ul », glissez un composant « LoginStatus » dans la deuxiĂšme « li » Dans le rĂ©pertoire racine CrĂ©ez une forme web avec page maĂźtre « Main » appelĂ©e « Default.aspx » Dans le rĂ©pertoire racine, crĂ©ez une forme web avec page maĂźtre « Main » appelĂ©e « Login.aspx » Dans le rĂ©pertoire « Secure », ajoutez une forme web avec page maĂźtre « Main » appelĂ©e « Page1.aspx » Dans le rĂ©pertoire « Admin », ajoutez une forme web avec page maĂźtre « Main » appelĂ©e page2 Tapez le texte « Accueil », « Page1 » et « Page2 » dans les pages « Default.aspx », « Page1.aspx » et « Page2.aspx » respectivement Ouvrez « Main.master » en mode design Pointez les trois liens sur les pages « default.aspx », « page1.aspx » et « page2.aspx » respectivement. Le code de « Main.master » devra ĂȘtre comme suit : <form id="form1" runat="server"> <header> <ul> <li> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Default.aspx">Accueil</asp:HyperLink> </li> <li> <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/Secure/Page1.aspx">Page 1</asp:HyperLink> </li> <li> <asp:HyperLink ID="HyperLink3" runat="server" NavigateUrl="~/Secure/Admin/Page2.aspx">Page2</asp:HyperLink> </li> </ul> </header> <div class="content"> <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder> </div> <footer> <ul> <li> <asp:LoginName ID="LoginName1" runat="server" /> </li> <li> <asp:LoginStatus ID="LoginStatus1" runat="server" /> </li> </ul> </footer> </form> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Ouvrez la page « Login.aspx » en mode design Glissez un composant « Login » sur la page Ajoutez une feuille de style appelĂ©e « Site.css » Collez dedans le code CSS suivant : body, form { font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif; margin: 0; padding: 0; } header { border-width: 7px; border-color: #F3C972; background-color: #6CB6FF; border-bottom-style: solid; margin: 0; padding: 1em 1em 0em 1em; } header ul, footer ul { margin: 0; padding: 0; list-style: none; } header ul li, footer ul li { display: inline-block; margin-right: 1em; padding: 0.5em; } header ul li:hover { background-color: #F3C972; } header a { color: black; text-decoration: none; } div.content { min-height: 400px; } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Ouvrez « Main.master » en mode design Glissez « Site.css » sur la page pour appliquer le style Ouvrez la console de gestion des paquets « Nuget » En utilisant l’instruction « Install-Package », installez les paquets « JQuery » puis « AspNet.ScriptManager.JQuery » ExĂ©cutez en appuyant sur « F5 » pour voir la structure du site Etape 3 : Configuration Le but de cette Ă©tape est de configurer l’application de façon Ă  ce qu’elle se base sur la base « aspnetdb » pour l’authentification et l’autorisation Ouvrez le fichier web.config Dans la section « configuration », ajoutez une chaĂźne de connexion pointant sur la base de donnĂ©es « aspnetdb », celle qui est en dessous est un exemple <connectionStrings> <add name="comptesDB" connectionString="Data Source=.;Initial Catalog=aspnetdb;Integrated Security=SSPI;" /> </connectionStrings> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } On va configurer l’application de façon Ă  ce qu’elle prenne le mĂ©canisme « Forms » pour l’authentification. DĂšs que l’application demande Ă  l’utilisateur de s’authentifier, elle le redirige vers la page « Login.aspx » Dans la section « system.web », ajoutez une section « authentifcation » comme suit : <authentication mode="Forms" > <forms loginUrl="~/Login.aspx"> </forms> </authentication> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } On va configurer l’application de façon Ă  ce qu’elle utilise le fournisseur SQL pour identifier et valider les utilisateurs. Dans la section « system.web », ajoutez une section « membership » comme suit : <membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15"> <providers> <clear /> <add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="comptesDB" applicationName="TestComptes" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="true" passwordFormat="Hashed" /> </providers> </membership> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } On va maintenant, configurer l’application de façon Ă  ce qu’elle en prenne en charge les rĂŽles Dans la section « system.web », ajoutez une section « roleManager » comme suit : <roleManager enabled="true" defaultProvider="roleProvider" > <providers> <clear/> <add name="roleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="comptesDB" applicationName="TestComptes" /> </providers> </roleManager> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }   Etape 4 : CrĂ©ation des utilisateurs et des rĂŽles Le but de cette Ă©tape est d’utiliser l’outil de configuration ASP.NET pour crĂ©er les utilisateurs et les rĂŽles. Nous crĂ©erons deux utilisateurs « simple » et « admin ». Les deux appartiennent au rĂŽle « simple » tandis que le rĂŽle « admin » n’inclut que l’utilisateur « admin ». Dans le menu « projet », cliquez sur « Configuration ASP.NET » L’application suivante apparaĂźt Cliquez sur « SĂ©curitĂ© » Cliquez sur « CrĂ©er un utilisateur » Ajoutez l’utilisateur « simple », mot de passe : « simple$$ », confirmation : « simple$$ », adresse : « simple@hotmail.com », question : « question » et rĂ©ponse : « rĂ©ponse ». Ajoutez un autre utilisateur « admin », mot de passe : « admin$$ », confirmation : « admin$$ », adresse : « admin@hotmail.com », question : « question », rĂ©ponse : « rĂ©ponse » Cliquez sur l’onglet « SĂ©curit » Cliquez sur « Ajouter ou gĂ©rer les rĂŽles » Ajoutez un rĂŽle « simple » puis le rĂŽle « admin » A droite du rĂŽle « admin », cliquez sur le lien « gĂ©rer » Cliquez sur le lien « tous » Cochez sur l’utilisateur « admin » Cliquez sur le lien « PrĂ©cĂ©dent » A droit du rĂŽle « simple », cliquez sur « GĂ©rer » Ajoutez les deux utilisateurs au rĂŽle « simple » Etape 5 : SĂ©curisation des zones En utilisant les rĂŽles crĂ©Ă©s prĂ©cĂ©demment, nous ne permettrons l’accĂšs la zone « Secure » qu’au rĂŽle « simple » ou « admin » et la zone « admin » uniquement au rĂŽle « admin ». Revenez dans VS Ajoutez un fichier de configuration dans le rĂ©pertoire « Secure » Dans la section « system.web », ajoutez la section « authorization » comme suit : <authorization> <allow roles="simple,admin"/> <deny users="*" /> </authorization> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } La premiĂšre instruction « allow » indique que la zone peut ĂȘtre accĂ©dĂ©e par les rĂŽles « simple » et « admin » La deuxiĂšme section « deny » indique que l’accĂšs est refusĂ© Ă  tout autre utilisateur n’appartenant pas Ă  ces deux rĂŽles Dans le rĂ©pertoire « Admin », ajoutez un fichier de configuration Ajoutez la section « authorization » comme suit : <authorization> <allow roles="admin"/> <deny users="*" /> </authorization> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } ExĂ©cutez en appuyant sur « F5 » Cliquez sur le lien « Page1 » Authentifiez-vous avec (admin,admin$$) Remarquez que vous avez accĂšs Ă  toutes les pages DĂ©connectez-vous Authentifiez-vous avec (simple,simple$$) Remarquez que ce login, n’a accĂšs qu’à la page 1 Pour tĂ©lĂ©charger le code, cliquez ici

Module 9 : Sécurisation des applications ASP.NET

C’est fait, c’est le dernier module de ma formation sur ASP.NET et j’espĂšre que ça a Ă©tĂ© utile. En attendant trĂšs prochainement les cours et les tutoriaux Workflow Foundation, voyons Ă  travers ce modules et les tutoriaux associĂ©s comment sĂ©curiser une application ASP.NET. SĂ©curisation des applications ASP.NET from Mohammed Amine Mostefai