Eine Anmeldung unter mehreren ASP.NET MVC-Anwendungen Fragen


8

Ich habe an einer ASP.NET MVC 4-Anwendung gearbeitet, die eine formularbasierte Authentifizierung verwendet. Benutzer werden anhand einer Anbieterauswahl im Anmeldeformular gegen einen Mitgliedschaftsanbieter validiert. Derzeit gibt es beispielsweise zwei Anbieter: Active Directory und einen benutzerdefinierten Anbieter, der einen externen Webdienst aufruft. Wenn der Benutzer gültig ist, aktualisieren wir Informationen in unserer lokalen Benutzertabelle, z. B. das Datum der letzten Anmeldung usw. Wenn der Benutzer gültig ist und nicht in der lokalen Benutzertabelle vorhanden ist, fügen wir sie hinzu. Sobald dies alles erledigt ist, setzen wir ein Cookie und fahren mit dem Hauptinhalt fort. Alle Controller überprüfen User.Identity.IsAuthenticated und kehren zur Anmeldeseite zurück, wenn der Test fehlschlägt.

Jetzt wird mir gesagt, dass diese Anwendung von einer einzelnen Webanwendung zu einer Lösung mit mehreren Anwendungen wechselt. Jede Anwendung sollte unabhängig von den anderen vorhanden sein, dasselbe Erscheinungsbild haben und dieselbe Anmeldefunktion verwenden. Für jede Anwendung muss möglicherweise ein neuer Mitgliedschaftsanbieter hinzugefügt werden. Wir werden auch Daten hinzufügen, um den Zugriff auf die Anwendungen zu beschränken. Ein Benutzer hat möglicherweise nur Zugriff auf eine der Anwendungen, während ein anderer Benutzer Zugriff auf alle Anwendungen hat.

Das Einrichten des Datenspeichers ist kein Problem. Das Teilen des Layouts von einer Anwendung, die in den anderen verwendet werden soll, ist ebenfalls kein Problem. Ich habe Probleme damit, zu entscheiden, wie die Anmeldefunktion so „umgestaltet“ werden soll, dass das Hinzufügen eines neuen Mitgliedschaftsanbieters und einer neuen Anwendung „später“ nicht dazu führt, dass wir vorhandene Anwendungen erneut veröffentlichen müssen. Im Moment möchten sie auch keine Startseite für die einmalige Anmeldung für die Anwendungen. Sie möchten, dass die Benutzer direkt zu einer Anwendung gehen, sich anmelden und das tun, wofür sie dorthin gekommen sind. Daher kann ich zu http://site1.mysites.com gehen, mich anmelden und meine Arbeit erledigen, während der Typ neben mir zu http://site2.mysites.com geht , sich anmeldet und seine Arbeit erledigt.

Ich habe Probleme, meinen Kopf um den besten Weg zu wickeln, dies zu tun. Mein erster Gedanke war ein WCF-Webdienst für die Anmeldung. Ich hätte eine Controller-Aktion, die den Webservice aufruft und die Anmeldeinformationen übergibt. Wenn die Anmeldung erfolgreich war, konnte ich eine Liste der Anwendungen für den Benutzer aus dem lokalen Speicher abrufen. Wenn Sie weitere Anwendungen hinzufügen, müssen wir vorhandene Apps nicht erneut veröffentlichen, da der Webdienst für diese Apps nicht geändert wurde.

Ich höre auch immer wieder von diesem ASP.NET-Web-API-Zeug. Soll ich stattdessen diesen Weg gehen? Möglicherweise möchte ich eine Site zum Verwalten der lokalen Benutzerdatenbank erstellen, sodass eine Site, auf der die Web-API gehostet wird, eine Option sein kann.

Ist das Web-API-Zeug für diese Situation falsch? Wenn nicht, hat es Vorteile gegenüber dem WCF-Webdienst? Gibt es alternative Methoden, um mein Endergebnis zu erzielen?

Antworten:


1

Es hört sich so an, als ob Ihre individuellen Anforderungen vorschreiben, dass Sie tatsächlich auf dem richtigen Weg sind, einen externen universellen Authentifizierungsanbieter für alle Ihre Anwendungen zu benötigen, insbesondere die Anforderung, dass eine Änderung des Mitgliedschaftsanbieters, wie Sie es ausdrücken, nicht zu einem Ergebnis führen kann und sollte neue Version für Ihre Anwendung.

Bei einem universellen Authentifizierungsanbieter können Sie steuern, welche Websites welche Mitgliedschaftsanbieter verwenden, und sogar Verantwortlichkeiten wie das Delegieren von Rollen und Berechtigungen an verschiedene Benutzer nach deren Authentifizierung unterwerfen.

Ich rate jedoch zur Vorsicht beim WCF-Ansatz, da SOAP-basierte Webdienste anscheinend langsam durch REST-basierte Webdienste ersetzt werden, wie sie in der ASP.NET-Web-API angeboten werden. Die Zukunft von Anwendungen ist mobil, und jede wichtige mobile Entwicklungsplattform unterstützt REST-basierte Webdienste nachdrücklich.

Wenn Sie auch nur den geringsten Zweifel haben, dass Sie den Support für Mitgliedschaftsanbieter möglicherweise auf mobile Anwendungen ausweiten müssen, ist es eine gute Idee, auf WCF zu verzichten. Darüber hinaus ermöglichen REST-basierte Webdienste eine bessere Integration durch Dritte (möglicherweise Kunden, die in Ihr Softwarepaket integrieren möchten?), Um mit Ihrer Anwendung zu kommunizieren und Informationen daraus abzurufen.

In Bezug auf Authentifizierungsprotokolle für REST-basierte Webdienste scheint es keinen sofort einsatzbereiten Weg zu geben, aber Sicherheit ist ziemlich wichtig. Es gibt einen guten Artikel darüber, wie Sie Ihre Authentifizierungsanforderungen bei Ihrer Authentifizierungsanbieteranwendung sichern können. http://codebetter.com/johnvpetersen/2012/04/02/making-your-asp-net-web-apis-secure/


Danke für die Eingabe. Ich hatte so viel über WCF nachgedacht. Ich glaube, ich werde daran arbeiten, eine auf REST basierende Lösung zu erstellen und diese auf dieser Verbindung zu sichern.
fkm71
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.