ASP.NET-Web-API mit benutzerdefinierter Authentifizierung

8

Ich bin auf der Suche nach Hilfe beim Erstellen einer Web-API mit benutzerdefinierter Benutzername / Passwort-Authentifizierung.

Ich habe meine eigene Datenbank, um Benutzer zu validieren, ich möchte keine Windows-Authentifizierung verwenden.

Ich hoffe, dass ich meine Web-API-Aufrufe mit einem Attribut wie [Authorize] dekorieren kann, so dass Aufrufe ohne Anmeldung fehlschlagen.

Ich möchte keine Anmeldeinformationen als Parameter für jede Methode übergeben müssen.

Diese API wird hauptsächlich von mobilen Geräten verwendet, die Xamarin PCL verwenden.

Die Web-API muss SSL verwenden.

Dies scheint ein einfaches Setup zu sein, aber mein Googling zeigt keine besonders nützlichen Treffer.

Idealerweise möchte ich einen Login-Controller, der einen Benutzer autorisiert und nachfolgende Methodenaufrufe durchlässt.

Kann jemand ein einfaches Beispiel oder gutes Lesematerial bereitstellen?

    
Julien 23.01.2015, 18:40
quelle

3 Antworten

10

Es ist ein großes Thema und Sie müssen wahrscheinlich einige Zeit damit verbringen, die Grundlagen aufzudecken, Entschuldigung.

Das sagte ... Damit nachfolgende Methodenaufrufe authentifiziert werden können, benötigen Sie etwas, das bei jeder Anfrage zurückgegeben werden kann. Wenn Sie Ihre API von einer Website aus aufrufen, sagen Sie, weil Sie Angular oder ähnliches verwenden, dann funktioniert ein einfaches Cookie (entsprechend verschlüsselt und MACed). Wie Sie das implementieren, hängt davon ab, ob Sie OWIN verwenden oder nicht und ob Sie MVC in Ihrem Projekt haben, um Ihre Seiten zu erstellen. Erstellen Sie den Cookie nicht selbst, verwenden Sie FormsAuthentication oder die entsprechende OWIN-Middleware. Sie müssen die Mitgliedschaft oder Identität von Microsoft nicht verwenden, aber seien Sie sich bewusst, dass die eigene Passwortverwaltung nicht trivial ist und Sie wirklich wissen müssen, was Sie mit dem Zeug machen - es gibt keinen Ersatz für viel Recherche, wenn Sie wollen das zu tun.

Wenn Sie die API von etwas anderem als einer Website aufrufen müssen, ist ein Cookie schmerzhaft. Beachten Sie auch, dass es einige subtile CSRF-Schwachstellen gibt, wenn Sie Cookies und Web-API verwenden, die Sie verstehen und vor denen Sie schützen müssen.

Eine Alternative zu Cookies ist es, etwas wie ThinkTecture Identityserver einzubetten (es ist kostenlos) und damit oAuth-Token auszugeben und sie dann an jede API-Anfrage anzuhängen. Es hat eine Reihe von Vorteilen, ist aber auch komplexer.

Ressourcen
Sie haben nach Hinweisen gefragt, wo Sie anfangen zu lesen. Ihre Aufgabe wird dadurch erschwert, dass Microsoft in den letzten Jahren ihren "Standard" -Ansatz mehrmals geändert hat. Der aktuelle Standardansatz ist Identity , der den bisherigen MembershipProvider (Good Riddance) ersetzt. Wenn Sie neu sind, würde ich vorschlagen, dass Sie diesen Weg gehen, um ehrlich zu sein - Sie können es erweitern und es verbindet sich sehr gut mit dem Rest des Stapels. Ja, Sie verlieren etwas Flexibilität, und Sie müssen es um Ihren aktuellen Benutzerspeicher wickeln. Aber Sie müssen sich fragen, ob die Sicherheit, die Sie aus der Box bekommen, das nicht wert ist.

Ich würde auch Brock Allens Blog empfehlen. Es ist ziemlich hardcore, aber er kennt seine Sachen und wird oft die Innereien vieler Microsoft-Authentifizierungstechnologien erklären.

Ich würde empfehlen, dass Sie versuchen, sich über "OWIN Authentication Middleware" zu informieren. Hier läuft alles, nicht zuletzt mit ASP.Net vNext. Leider konzentrieren sich die meisten Dokumente darauf, wie super einfach es zu benutzen ist (und es ist - für eine Demo), aber es fehlen detaillierte Informationen darüber, wie es wirklich funktioniert, was sehr frustrierend sein kann.

Um zu verstehen, wie Tokens und die verschiedenen Standards funktionieren, würde ich Ihnen empfehlen, dieses Video hier anzuschauen: Ссылка

Sehen Sie sich dann Azure Mobile Services an, die sogar clientseitige Bibliotheken für den Umgang mit der Authentifizierung oder ThinkTecture Identity Server enthält. Selbst wenn du mit nicht mit IdSrv fertig wirst, indem du ihre Tutorials durchführst, wirst du sehr viel darüber lernen, wie das Ganze im Allgemeinen funktioniert. Es basiert alles auf offenen Standards. Dokumente hier: Ссылка Versuchen Sie, ihre Tutorials zu bearbeiten. Sie verwenden eine Windows-Konsolen-App anstelle einer App, aber das Konzept ist das gleiche.

Ich wünsche dir viel Glück, aber ich möchte nur sagen: bitte hack nicht einfach etwas zusammen, das zu funktionieren scheint. Websicherheit wird immer komplexer und es ist sehr einfach, Sicherheitslücken in Ihrem Code zu hinterlassen - ich spreche aus Erfahrung :)

Sei kein Moonpig.

    
Frans 23.01.2015, 19:06
quelle
3

Abhängig davon, welche Version Sie verwenden. MVC5 Web API 2 implementiert einen Ansatz namens Bearer Token. Sie führen also im Grunde einen Post mit Benutzername und Passwort vor Ihrem Ссылка Endpoint aus. Dies wird ein Bearer-Token in der Nutzlast zurückgeben. Sie senden nachfolgende https-Anfragen an Ihre autorisierten Web-API-Methoden mit dem Bearer-Token in einer Kopfzeile. Dies ist alles aus der Box mit der neuesten Version der Web-API. Dieser Link umreißt den Ansatz ziemlich gut: Ссылка

>     
Noel 23.01.2015 18:50
quelle
2

Custom Membership Provider mein Freund!

Ссылка

Mit benutzerdefiniertem Mitgliedschaftsanbieter Sie können ein Autorisierungs-Cookie-Token (alias AuthCookie) festlegen und die Formularauthentifizierungstechnologie in Ihrer Anwendung verwenden. Mit einem benutzerdefinierten Mitgliedschaftsanbieter können Sie eine benutzerdefinierte Validierungsmethode erstellen, die auf Ihre DataBase zugreift und die Anmeldeinformationen der Benutzer abgleicht.

Mit dem AuthCookie wird jede nachfolgende Anfrage wie eine traditionelle Authorization Cookie-Technologie authentifiziert.

Sie können auch einen URL-Ansatz zum Neuschreiben verwenden, um die Benutzer auf die SSL-Seiten umzuleiten: Beste Methode in asp.net zu erzwingen https für eine gesamte Website?

    
Vitox 23.01.2015 18:55
quelle

Tags und Links