Pour l'authentification par formulaires, j'ai utilisé ceci dans web.config (notez l'attribut de domaine):
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" name=".ASPXAUTH" protection="Validation" path="/" domain=".myserver.dev" />
</authentication>
Comment une connexion unique entre les sous-domaines est-elle configurée pour le nouveau cadre d'identité ASP.NET dans Mvc 5?
Plus d'informations:
Je crée une application multi-locataire. Chaque client sera sur un sous-domaine:
client1.myapp.com
client2.myapp.com
Je souhaite qu'un utilisateur puisse se connecter à client1.myapp.com
puis allez à client2.myapp.com
et toujours connecté. Cela a été facile avec l'authentification par formulaire. J'essaie de comprendre comment le faire avec le nouveau cadre d'identité.
ÉDITER
Voici le code qui a finalement fonctionné pour moi:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "Application",
LoginPath = "/Account/Login",
CookieDomain = ".myapp.com"
});
Dans Startup.Auth.cs, vous verrez quelque chose comme:
pour RC:
app.UseSignInCookies();
Cela a été supprimé dans RTM et remplacé par la configuration explicite de l'authentification du cookie:
app.UseCookieAuthentication(new CookieAuthenticationOptions {
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});
La classe CookieAuthenticationOptions a une propriété CookieDomain qui est ce que vous recherchez, je crois.
Cela me rendait fou jusqu'à ce que j'apprenne qu'Identity 2.0 dépend toujours de la clé machine pour crypter le cookie d'authentification. Donc, si vous voulez deux instances de la même application sur des sous-domaines différents, vous devez définir la même clé machine pour chaque application.
Donc en résumé:
Définir des clés de machine identiques dans la configuration Web de chaque application
<system.web>
<machineKey decryptionKey="EEEB09D446CCFE71B82631D37DEDCC917B8CB01EC315" validationKey="60E4EFE8DD26C4BF8CDAEDCA10716C85820839A207C56C8140DB7E32BE04630AD631EDF25C748D0F539918283C5858AF456DBE208320CFFA69244B4E589" />
</system.web>
Cette réponse m'a amené à définir les valeurs: ASP.NET Identity 2 utilise-t-il une machinekey pour hacher le mot de passe?
Vous devez configurer dans web.config la même machineKey pour TOUS les sites Web/applications.
Tous les sites Web DOIVENT AVOIR au moins cette configuration.
http://msdn.Microsoft.com/en-us/library/w8h3skw9 (v = vs.85) .aspx
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" name=".ASPXAUTH" protection="Validation" path="/" domain=".myserver.dev" />
</authentication>
<machineKey validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F" validation="SHA1" decryption="Auto"/>
</system.web>
Ceci est un exemple
Dans le fichier Startup.Auth.cs, ajoutez le paramètre CookieDomain
à votre domaine:
var cookieAuthenticationOptions = new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
CookieDomain = ".mydomain.com"
};
Ensuite, pour tous les sites Web, vous devez définir une clé machine unique. La façon la plus simple d'en générer un nouveau est d'utiliser IIS:
Trouvez l'option "Clé machine" sur votre site:
Cliquez sur le bouton "Générer des clés" pour obtenir vos clés.
Enfin, le processus ci-dessus ajoutera ce qui suit à votre web.config
et vous devez vous assurer que ces informations sont copiées dans chacun de vos sites.
<machineKey
validationKey="DAD9E2B0F9..."
decryptionKey="ADD1C39C02..."
validation="SHA1"
decryption="AES"
/>