Bonjour !

Nous sommes en train de développer un ensemble d'application en ligne et nous aimerions que la connexion à une de nos applications soit "commune" avec les autres applications, bref du "Single sign on"...

Par chance, pas de cross domain, nos applications sont toutes basées sur des xxx.site.com !

Je me suis donc renseigné et j'ai donc modifié mon web.config pour que mes 3 applications aient le même nom de cookie, le même domaine, la même configuration de l'ASP.NET Membership ou encore la même machineKey...

Voici à quoi ressemble mon Web.config (qui au final est le même dans les 3 projets)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
 
<configuration>
 
  <connectionStrings>
 
    <add name="MembershipSmartApps"
         connectionString="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
         providerName="System.Data.SqlClient" />
 
  </connectionStrings>
 
  <appSettings>
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
  </appSettings>
 
  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </assemblies>
    </compilation>
 
    <membership defaultProvider="AspNetSqlMembershipProvider">
      <providers>
        <clear />
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="MembershipSmartApps" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/SmartApps" />
      </providers>
    </membership>
 
    <profile inherits="SmartApps.Models.Profile">
      <providers>
        <clear />
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="MembershipSmartApps" applicationName="/SmartApps" />
      </providers>
    </profile>
 
    <roleManager enabled="true">
      <providers>
        <clear />
        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="MembershipSmartApps" applicationName="/SmartApps" />
        <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/SmartApps" />
      </providers>
    </roleManager>
 
    <!--<authentication mode="Forms">
      <forms timeout="10000"
             name="SmartAppsv1.2.7"
             domain="ictgetsmart.com"/>
    </authentication>-->
    <authentication mode="Forms">
      <forms timeout="10000"
             name="SmartAppsv1.2.14"/>
    </authentication>
 
    <httpRuntime requestValidationMode="2.0" encoderType="SmartApps.AntiXssEncoder, Common" />
 
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages"/>
      </namespaces>
    </pages>
 
    <httpHandlers>
      <add verb="*" path="DependencyHandler.axd" type="ClientDependency.Core.CompositeFiles.CompositeDependencyHandler, ClientDependency.Core "/>
    </httpHandlers>
 
    <httpModules>
      <add name="ClientDependencyModule" type="ClientDependency.Core.Module.ClientDependencyModule, ClientDependency.Core"/>
    </httpModules>
 
    <machineKey validationKey="xxxxxxxxxxxxx" decryptionKey="yyyyyyyy" validation="SHA1" decryption="AES"/>
 
  </system.web>
 
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
 
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
 
</configuration>
Comme vous pouvez le voir, la partie "domain" a été mise en commentaire pour être gérée ailleurs...
Dans mon LogOn :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
var httpCookie = FormsAuthentication.GetAuthCookie(user.UserName, isRemember);
httpCookie.Domain = SmartAppsVarious.SiteUrl;
Response.Cookies.Add(httpCookie);
Response.Redirect(Url.ActionContact("Index", "Contact"));
Alors passons au soucis : que ce soit en configurant le domaine dans le web.config ou comme ci-dessus lors du LogOn, ça marche nickel entre deux projets : si l'un se connecte, passer à l'autre se fait sans se reloguer et une déconnexion sur l'un entraîne évidemment la déconnexion de l'autre (on se comprend...).

Bref, le résultat attendu, quelle que soit la façon de procéder ! Alors que le troisième projet, par contre, pas moyen d'avoir ce comportement...
Si je me connecte sur un projet fonctionnel et que je me rends sur le troisième projet qui ne fonctionne pas : il me renvoie sur la page de LogOn, je peux alors me loguer mais si je retourne après sur un des deux projets fonctionnels, lui aussi a besoin d'une reconnexion...

J'ai regardé sur Fiddler et il comprend bien qu'il a affaire au même domaine donc il envoie bien le cookie dont ils se servent tous pour la connexion... Même clé dans le web.config donc je suppose qu'il n'a pas de soucis pour décrypter le cookie ?

Je ne suis pas un grand habitué de tout ça mais là si quelqu'un a une idée du soucis, je ne suis pas contre

Merci d'avance à toute personne qui prendra du temps sur ce soucis...