2012-06-18 4 views
6

In einer ASP.NET MVC 4-Anwendung, die das .NET 4.5-Framework in Verbindung mit Azure Access Control Service (ACS) verwendet, möchte ich den Benutzern mehrere Authentifizierungsmöglichkeiten bieten (zB Google, Facebook, Windows Live usw.). Was ist die "beste Vorgehensweise" für die Zuordnung eines einzelnen Benutzers zu mehreren Identitätsanbietern?Mehrere anspruchsbasierte Identitätsanbieter einem Benutzer mit ASP.NET zuordnen

Sagen Sie beispielsweise, dass sich der Benutzer eines Tages bei Google anmeldet und dann am nächsten Tag zu einem anderen Browser wechselt und sich bei Facebook anmeldet. Wie kann ich den Facebook-Login mit dem vorherigen Google-Login mit demselben Benutzer verknüpfen?

Antwort

2

Wenn Sie ACS verwenden, können Sie die Informationen von jedem IdP (z. B. Gogle, Yahoo !, FB usw.) mithilfe der Anforderungsumwandlung auf ACS in ein gemeinsames Handle übersetzen. Ein gängiges Handle, das Leute verwenden, ist die Benutzer-E-Mail. Aber wenn Sie viele E-Mails Zuordnung zu den gleichen Benutzer annehmen möchten, dann würden Sie Ihre eigene einzigartige ID einführen (als Anspruch) und Karte IdP geliefert Ansprüche hinein:

  • [email protected] (E-Mail - Google) -> (UserId - YourApp) Benutzer_1234
  • [email protected] (E-Mail - Yahoo!) -> (UserId - YourApp) user_1234
  • 64746374613847349 (Nameidentifier - LiveID) -> (UserId - YourApp) user_1234

Sie diese durch ACS-API automatisieren. Sie sollten auch mit der ersten Anmeldung des Benutzers auf Ihrer Website umgehen (z. B. Benutzer nach einer E-Mail fragen und eine Bestätigungsnachricht senden, die das Mapping auslöst).

Vermutlich verwenden Sie diese Informationen zum Abrufen von Daten aus einer lokalen Datenbank in Ihrer App, andernfalls könnten Sie einfach alles in den Ansprüchen codieren und sich nicht um Äquivalenzen kümmern. Ansprüche sind oft ein guter Ort, um allgemeine Profildaten zu kodieren. (z. B. Rollen usw.)

+0

Meine Gedanken waren, eine anwendungsspezifische Datenbank zu verwenden, um benutzerspezifische Daten zu halten (mit anderen Worten, Ansprüche). Könnten die Ansprüche, die ACS für mich generiert und einige benutzerdefinierte Ansprüche hinzufügt, mit der auf .NET-Claims basierenden Identitätsfunktion von .net berücksichtigt werden (sobald ich die IDP-Identität mit der standortspezifischen Identität verknüpfe)? – Hallmanac

+0

Sie können die benutzerdefinierten Ansprüche in Ihrer App hinzufügen (siehe "ClaimsAuthenticationManager") oder Sie können diese benutzerdefinierten Ansprüche einfach in ACS selbst speichern. (Als Regeln: [email protected] -> (SomeClaim) somevalue). Hier ist der Link für den ClaimsAuthnManager: http://msdn.microsoft.com/en-us/library/microsoft.identitymodel.claims.claimsauthenticationmanager.aspx –

+1

Was ist mit einem echten Done-Done-Beispiel? – Adaptabi

3

Suchen Sie nicht weiter als stackoverflow selbst für ein gutes Beispiel dafür. Klicken Sie auf Ihr Benutzerprofil und wählen Sie "Meine Logins".

Wenn ein Benutzer ein Konto erstellt, wählt er den Identitätsanbieter aus, mit dem Sie sich anmelden möchten. Ihre Anwendung erstellt eine neue standortspezifische eindeutige Benutzer-ID und verknüpft sie mit einer von einem Drittanbieter bereitgestellten eindeutigen ID . (Sie könnten E-Mail verwenden, aber die meisten Identitätsanbieter bieten auch einen eindeutigen Benutzer-ID-Anspruch, der sich nicht ändert, selbst wenn der Benutzer seine E-Mail ändert)

Jetzt, nachdem der Benutzer sich angemeldet hat, verfügen sie über eine Kontoverwaltung Control Panel, über das sie zusätzliche Links zu anderen Identity Providern aufbauen können.

Ich sehe zwei Möglichkeiten, dieses Ziel zu erreichen:

  1. Haben Sie Ihre MVC-Anwendung Konto Links bestehen. Wenn sich ein Nutzer anmeldet, fragen Sie Ihren Account-Link-Store mit dem eindeutigen ID-Anspruch des Drittanbieters ab und lösen Sie Ihre ortsspezifische eindeutige Nutzer-ID auf.

  2. Verwenden Sie die ACS-Regel-Engine. Sie würden eine Regel pro Kontoverbindung erstellen. Zum Beispiel kann sagen, dass ich entweder mit gmail oder LiveID und meiner eindeutigen ID ist 1234. Zwei Regeln sehen wie folgt anmelden kann:

Für die einzigartige Fallart-ID-Ausgabe, können Sie aus den verfügbaren Anspruchstypen auswählen oder eigene bezeichnen. ACS verfügt über eine OData based management service, die Sie verwenden können, um diese Regeln programmgesteuert von Ihrer MVC-Anwendung zu erstellen. Hier ist ein code sample.

+0

Gibt es in der ACS-Regelengine eine Art von Persistenzspeicher innerhalb von ACS, mit dem ich bekannte standortspezifische IDs mit IDP-IDs über die Regeln verknüpfen kann? Das habe ich nicht gesehen. – Hallmanac

+0

Die ACS-Rules-Engine ist effektiv Ihr persistenter Speicher in dem Sinne, dass die Regeln beibehalten werden, die Sie hinzufügen. Sie können die ACS-Regelengine jedoch nicht so verknüpfen, dass Ansprüche von einem externen Datenspeicher abgerufen werden (wie dies bei ADFS möglich ist). –

Verwandte Themen