2009-07-31 16 views
6

Was ist die beste Lösung für die Implementierung von Single Sign On in einer .net-Anwendung? Ich habe gegoogelt und einige Lösungen gefunden, aber ich bin nicht sehr überzeugt von diesen Lösungen.Wie kann Single Sign On in .Net implementiert werden?

Benutzer meldet sich auf website1 an und wechselt dann zu website2. Wie wird website2 wissen, dass sich der Benutzer angemeldet hat? Ich schätze, indem ich einige Token in der URL übergebe, die von website2 in der Datenbank auf Gültigkeit überprüft werden. Das bedeutet, dass ich alle URLs in website1 marshallieren muss, die zu website2 führt?

Zweitens, wenn der Benutzer website2 für etwa 1 Stunde durchsuchen und dann auf Website1 wechseln. Zu diesem Zeitpunkt hat die Sitzung der website1 abgelaufen, so dass der Benutzer eine Anmeldeseite sehen wird, oder? Dieses Verhalten ist jedoch falsch bei der Funktion für einmaliges Anmelden.

+0

Dies ist Single Authentication und nicht Single Sign On. Sie müssen sich N-mal für N Sites mit derselben Authentifizierung anmelden. –

+0

Sie sollten zwischen Authentifizierung und Autorisierung unterscheiden. Sie können einen Benutzer autorisieren, was bedeutet, dass Sie wissen, wer sie sind, aber Sie müssen diesen Benutzer auf einer Ihrer beiden Websites dennoch autorisieren, auf Inhalte zuzugreifen, auf die er auf jeder Website nicht zugreifen kann. Das Token wird ablaufen, kann jedoch normalerweise aktualisiert werden, um den Zugriff zu erhalten. – htm11h

Antwort

14

Ich glaube, Sie missverstehen, wie Single Sign-On funktioniert.

Betrachten wir Website1 und Website2, die Single Signon verwenden möchten.

Eine Login-Website wird unter identityProvider erstellt. Dies ist der einzige Ort, an dem ein Anmeldebildschirm angezeigt wird.

Wenn der Benutzer website1 besucht und sich zum Anmelden entscheidet website1 sendet den Benutzer an den Anmeldebildschirm von identityProvider. Der Benutzer meldet sich bei identityProvider an, der sein eigenes Anmelde-Cookie für seine Domäne ablegt (und dem Benutzer möglicherweise ermöglicht, seine Authentifizierungsinformationen zu speichern, sodass sie nie wieder aufgefordert werden). Es leitet dann den Browser zurück zu website1 einschließlich eines Token in der Anfrage, die Website1 öffnet, erhält Identitätsinformationen von und führt seine eigenen Login-Bits (Droping seine eigenen Authentifizierung Cookie, die dauert, wie es will).

Dann besucht der Benutzer website2 und wählt die Anmeldung aus. Website2 hüpft den Benutzer zu identityProvider, der bereits weiß, wer der Benutzer ist und, wenn der Benutzer seine Anmeldeinformationen gespeichert hat, automatisch authentifiziert und dann mit einem anderen Token auf Website2 umgeleitet wird, das sich öffnet und dann seine eigenen Login-Bits ausführt.

Es gibt eine Reihe von Sicherheit um ihn herum, Token auf bestimmte Websites zu beschränken, nur Token ermöglicht auf der weißen Liste Websites gesendet werden etc. etc.

So Ihre Bedenken auszuräumen

  1. Benutzer anmeldet website1 und bewegt sich dann zu website2. Wie wird website2 wissen, dass sich der Benutzer angemeldet hat? Es tut es nicht. website2 muss zuerst Authentifizierungsinformationen von der Single Signon-Site anfordern.
  2. Das bedeutet, ich muss alle URLs in Website1 marshall, die Website2 nimmt? Nein, es sei denn, Sie machen website1 ebenfalls zum Identitätsanbieter. Selbst dann wäre das schmerzhaft, besser wäre es, wenn website2 den Identity Provider zurückleitet, wenn ein Token notwendig ist.
  3. Zweitens, wenn der Benutzer website2 für etwa 1 Stunde durchsuchen und dann auf Website1 verschieben. Zu diesem Zeitpunkt hat die Sitzung der website1 abgelaufen, so dass der Benutzer eine Anmeldeseite sehen wird, oder? - Es hängt davon ab, wie Sie Website1 konfigurieren und wie lange der Authentifizierungscookie dauert.
  4. Dieses Verhalten ist jedoch falsch bei der Funktion für einmaliges Anmelden. Nein, ist es nicht. Einzelanmeldung bedeutet nicht, dass Sie ein Floating-Token erhalten, das zwischen Sites geteilt wird. Jede Website, die das Single Sign-On verwendet, erstellt immer noch ihr eigenes Authentifizierungs-Cookie. Was passiert, wenn der Benutzer zu website1 zurückkehrt, erkennt er einen abgelaufenen Authentifizierungscookie und sendet den Benutzer dann wieder an die Seite für die einmalige Anmeldung, wo er authentifiziert wird (stillschweigend) und ein neuer Token zurück an website1 gesendet wird, wodurch ein neuer erstellt wird Authentifizierungs-Cookie für sich.
+0

Dies ist Single Authentication und nicht Single Sign On. Sie müssen sich N Mal für N Sites mit derselben Authentifizierung anmelden. –

+0

Ich denke, der Schritt "Dann besucht der Benutzer website2 und * wählt logon *" ist das, was das OP vermeiden möchte. Wie ist das möglich? – CodeGrue

0

MS hat ein Papier auf sie innerhalb des Unternehmens ein paar Jahre zurück - wir Set-up die Proben aber nie es für real umgesetzt - Single Sign-on

+0

Ich habe dieses Papier schon gesehen, aber es beantwortet meine Zweifel nicht. –

3

Die offizielle Microsoft-Ansatz ist über Active Directory Federation Services (die Wraps SAML mit AD-Authentifizierung). Dies hat die Eigenschaften, die Sie suchen - aber möglicherweise zu schwer für eine öffentliche Webanwendung.

3

Ich nehme an, dass Sie die Windows-Authentifizierung mit Active Directory usw. nicht verwenden möchten. Eine Methode besteht darin, von einer authentifizierten Sitzung zur anderen über ein Sicherheitstoken in der Abfragezeichenfolge zu übertragen, wie Sie beschreiben.

Beide Anwendungen verwenden denselben öffentlichen Verschlüsselungsschlüssel zum Codieren/Decodieren des Sicherheitstokens. Wie Sie sagen, funktioniert das gut, wenn Sie begrenzte, vordefinierte Übergangslinks zwischen den Websites haben, aber wenn Sie Seitenverknüpfungen zwischen den Apps verwenden möchten, müssen Sie diese URLs im laufenden Betrieb generieren, damit sie das Token enthalten.

Die Art, wie Sie mit Timeouts umgehen, ist, dass das Sicherheitstoken auch eine Ablaufzeit enthält. Sie generieren bei jeder Seitenanforderung oder beim Erstellen einer neuen Verknüpfung zwischen Apps ein neues Sicherheitstoken.

In der Regel enthält das Sicherheitstoken eine Benutzer-ID und ein Zeitlimit. Die Anmeldeprüfung gibt entweder die Benutzer-ID oder null zurück, wenn das Zeitlimit abgelaufen ist.

Es ist keine schnelle Lösung, um richtig und sicher zu codieren. Vielleicht können Sie eine vorgefertigte Version in Code Project finden?

1

Sie können verschiedene SSO-Mechanismen für verschiedene Anwendungen basierend auf Ihrer Anwendung verwenden.

ich jedoch könnte sehen "Out-of-Box SSO" Service von Live, Google, Yahoo, Facebook usw. zur Authentifizierung durch Unterstützung von SAML. Dies wird uns helfen, die Probleme bei der Aufrechterhaltung unserer eigenen SSO-Service-Implementierung loszuwerden.

Wenn Sie ein grundlegendes Verständnis benötigen, wie die SSO Arbeit, Sie here

Verwandte Themen