web-dev-qa-db-fra.com

Cookie d'identité ASP.NET sur les sous-domaines

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"
});
40
orourkedd

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.

34
Hao Kung

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é:

  1. CookieDomain = ".myapp.com"
  2. 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?

14
BrandorK

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

13
christiangobo

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:

enter image description here

Cliquez sur le bouton "Générer des clés" pour obtenir vos clés.

enter image description here

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"
/>
12
JDandChips