Frage

Lassen Sie uns sagen, dass Sie Websites haben www.xyz.com und www.abc.com.

Nehmen wir an, dass ein Benutzer geht an www.abc.com und sie erhalten die normalen ASP .NET-Mitgliedschaftsanbieter authentifiziert.

Dann von dieser Seite, sie zu (Umleitung, verbunden, was auch immer funktioniert) geschickt bekommen Website www.xyz.com und der Absicht der Website www.abc.com war, dass die Benutzer auf der anderen Seite als Status passieren von IsAuthenticated, so dass die Website www.xyz.com fragt nicht für die Anmeldeinformationen des Benutzers wieder.

Was wäre erforderlich, damit dies funktioniert? Ich habe einige Einschränkungen für diese allerdings die Benutzerdatenbanken vollständig getrennt sind, ist es für eine Organisation nicht intern ist, in jeder Hinsicht, es ist wie vorbei aus stackoverflow.com als authentifizierte Google, ist es, dass separate in der Natur. Ein Link zu einem entsprechenden Artikel genügt.

War es hilfreich?

Lösung

Versuchen FormAuthentication mit durch die web.config-Authentifizierung Abschnitt Einstellung wie folgt:

<authentication mode="Forms">
  <forms name=".ASPXAUTH" requireSSL="true" 
      protection="All" 
      enableCrossAppRedirects="true" />
</authentication>

Erstellen Sie einen Computerschlüssel. Beispiel: Der einfachste Weg MachineKey zu erzeugen - Tipps und Tricks: ASP.NET, IIS ...

Wenn auf die anderen Anwendung veröffentlicht das Authentifizierungsticket als verstecktes Feld geführt wird. Während die Post von der ersten Anwendung zu lesen, wird die zweite App das verschlüsselte Ticket lesen und die Benutzer authentifizieren. Hier ist ein Beispiel für die Seite, die vergeht, die Beiträge des Feldes:

aspx:

<form id="form1" runat="server">
  <div>
    <p><asp:Button ID="btnTransfer" runat="server" Text="Go" PostBackUrl="http://otherapp/" /></p>
    <input id="hdnStreetCred" runat="server" type="hidden" />
  </div>
</form>

Code-behind:

protected void Page_Load(object sender, EventArgs e)
{
    FormsIdentity cIdentity = Page.User.Identity as FormsIdentity;
    if (cIdentity != null)
    {
        this.hdnStreetCred.ID = FormsAuthentication.FormsCookieName;
        this.hdnStreetCred.Value = FormsAuthentication.Encrypt(((FormsIdentity)User.Identity).Ticket);
    }
}

Siehe auch das Quer App Form Authentifizierung in Kapitel 5 dieses Buch von Wrox. Es empfiehlt Antworten wie die oben zusätzlich eine Homebrew-SSO-Lösung zu bieten.

Andere Tipps

Wenn Sie das Mitgliedersystem gebaut verwenden, können Sie kreuzen Sub-Domain-Authentifizierung mit Formen Auth durch in jedem web.config einige, wie diese verwendet wird.

<authentication mode="Forms">
    <forms name=".ASPXAUTH" loginUrl="~/Login.aspx" path="/" 
                  protection="All" 
                  domain="datasharp.co.uk" 
                  enableCrossAppRedirects="true" />

</authentication>

Stellen Sie sicher, dass Name, Pfad, den Schutz und Domain das gleiche in allen web.configs sind. Wenn die Websites auf verschiedenen Maschinen sind, werden Sie auch dafür sorgen müssen, dass die machineKey und Validierung und Verschlüsselungsschlüssel gleich sind.

Wenn Sie Benutzersitzungen in der Datenbank speichern, können Sie einfach überprüfen Sie die Existenz der Guid in der Sitzungstabelle, wenn es vorhanden ist, dann wird der Benutzer bereits auf der anderen Domäne authentifiziert. Dafür arbeiten würden Sie die Sitzung GUID in der URL muss enthalten, wenn Sie den Benutzer auf die andere Website umgeleitet werden.

Nicht sicher, was Sie für .NET verwenden würde, aber normalerweise würde ich benutzen Memcached ein LAMP-Stack.

Die Auflösung hängt von der Art der Anwendung und die Umgebung, in der sie ausgeführt wird. Z.B. im Intranet mit NT-Domäne können Sie NTLM verwenden, um Windows-Anmeldeinformationen direkt an Server in Intranets Umfang, ohne dass Sitzungen duplizieren passieren.

Der Ansatz, wie dies zu tun ist in der Regel dem Namen Single Sign-On (siehe Wikipedia ).

Es gibt mehrere Ansätze für dieses Problem, die als "Cross-Domain-Single-Sign-On" beschrieben wird. Wikipedia-Artikel, auf die von Matej ist besonders hilfreich, wenn Sie sich für eine Open-Source-Lösung suchen - aber - in einer Windows-Umgebung, die ich Ihnen am besten ab mit einem der zwei Ansätze sind belive:

  1. Kaufen Kommerzielle SSO Produkt (wie Siteminder oder PingIdentity)
  2. Verwenden Sie Microsofts Cross-Domain-SSO-Lösung, die so genannte ADFS - aktive Direcctory Federation Services. (Verband ist die Bezeichnung für das Verhalten von mehreren Domänen zu koordinieren)

Ich habe Siteminder verwendet und es funktioniert gut, aber es ist teuer. Wenn Sie in einer all Microsoft-Umgebung sind glaube ich ADFS die beste Wahl ist. Beginnen Sie mit diesem ADFS White Paper .

Ich würde Benutzer so etwas wie CAS:

[1]: http://www.ja-sig.org/products/ cas / CAS

Dies ist ein Problem gelöst und würde Ihre eigenen nicht empfehlen rollen.

Alternativ, wenn Sie Ihre eigenen und die Standorte in Frage rollen wollen, sind nicht auf dem gleichen Server oder haben keinen Zugriff auf eine gemeinsame Datenbank (in diesem Fall sieht die oben genannten Antworten), dann könnten Sie legen ein Web-Beacon auf jeder der Seiten, die zurück auf die andere Seite verweisen würde.

Legen Sie eine einzelne Pixelbild (Web Beacon) vor Ort A, Standort B durch den Benutzer-ID vorbei nennen würde (verschlüsselt und mit Zeitstempel). Dies würde dann erstellen Sie eine neue Benutzersitzung vor Ort B für den Benutzer, die als angemeldet eingestellt werden würden. Dann, wenn die Benutzer-Website B besucht würden sie bereits angemeldet sein.

Anrufe minimieren Sie nur die Web-Beacons auf der Homepage platzieren können und oder in Bestätigungsseite einloggen. Ich habe dies in der Vergangenheit erfolgreich verwendet, um Informationen zwischen Partnerseite.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top