web-dev-qa-db-de.com

ASP.NET Identity Cookie über Subdomains hinweg

Für die Formularauthentifizierung habe ich dies in web.config verwendet (beachte das Domain-Attribut):

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" name=".ASPXAUTH" protection="Validation" path="/" domain=".myserver.dev" />
</authentication>

Wie wird ein Single Sign-On zwischen Subdomänen für das neue ASP.NET Identity Framework in Mvc 5 konfiguriert?

Mehr Info:

Ich erstelle eine mandantenfähige Anwendung. Jeder Client befindet sich in einer Subdomain:

client1.myapp.com

client2.myapp.com

Ich möchte, dass sich ein Benutzer bei client1.myapp.com Anmelden und dann zu client2.myapp.com Wechseln und trotzdem angemeldet bleiben kann. Dies war mit der Formularauthentifizierung ganz einfach. Ich versuche herauszufinden, wie es mit dem neuen Identity Framework geht.

BEARBEITEN

Hier ist der Code, der letztendlich für mich funktioniert hat:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
  AuthenticationType = "Application",
  LoginPath = "/Account/Login",
  CookieDomain = ".myapp.com"
});
40
orourkedd

In Startup.Auth.cs sehen Sie so etwas wie:

für RC:

app.UseSignInCookies();

Dies wurde in RTM entfernt und durch die explizite Konfiguration der Cookie-Authentifizierung ersetzt:

    app.UseCookieAuthentication(new CookieAuthenticationOptions {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/Account/Login")
    });

Die CookieAuthenticationOptions-Klasse verfügt über eine CookieDomain-Eigenschaft, nach der Sie meines Erachtens suchen.

34
Hao Kung

Das hat mich verrückt gemacht, bis ich erfuhr, dass Identity 2.0 immer noch vom Computerschlüssel abhängt, um das Authentifizierungs-Cookie zu verschlüsseln. Wenn Sie also zwei Instanzen derselben Anwendung in verschiedenen Unterdomänen verwenden möchten, müssen Sie für jede Anwendung denselben Computerschlüssel festlegen.

Also zusammenfassend:

  1. CookieDomain = ".myapp.com"
  2. Stellen Sie in der Webkonfiguration jeder Anwendung identische Computerschlüssel ein

    <system.web>
      <machineKey decryptionKey="EEEB09D446CCFE71B82631D37DEDCC917B8CB01EC315" validationKey="60E4EFE8DD26C4BF8CDAEDCA10716C85820839A207C56C8140DB7E32BE04630AD631EDF25C748D0F539918283C5858AF456DBE208320CFFA69244B4E589" />
    </system.web>
    

Diese Antwort veranlasste mich, die folgenden Werte festzulegen: Verwendet ASP.NET Identity 2 den Computerschlüssel zum Hashing des Kennworts?

14
BrandorK

Sie müssen in web.config den gleichen machineKey für ALLE Websites/Anwendungen einrichten.

Alle Websites MÜSSEN mindestens diese Konfiguration haben.

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>

Dies ist ein Beispiel

13
christiangobo

Fügen Sie in der Datei Startup.Auth.cs den Parameter CookieDomain zu Ihrer Domain hinzu:

var cookieAuthenticationOptions = new CookieAuthenticationOptions
{
    AuthenticationType  = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath           = new PathString("/Account/Login"),
    CookieDomain        = ".mydomain.com"
};

Dann müssen Sie für alle Websites einen eindeutigen Maschinenschlüssel festlegen. Der einfachste Weg, einen neuen zu generieren, ist die Verwendung von IIS:

Suchen Sie auf Ihrer Website nach der Option "Maschinenschlüssel":

enter image description here

Klicken Sie auf die Schaltfläche "Schlüssel generieren", um Ihre Schlüssel abzurufen.

enter image description here

Schließlich wird durch den obigen Vorgang Folgendes zu Ihrem web.config Hinzugefügt, und Sie müssen sicherstellen, dass dies in jede Ihrer Sites kopiert wird.

<machineKey
  validationKey="DAD9E2B0F9..."
  decryptionKey="ADD1C39C02..."
  validation="SHA1"
  decryption="AES"
/>
12
JDandChips