Rolle Anbieter / Mitgliedschaft? Wie in asp.net web-api?
Baue ich eine asp.net mvc-web-api-Anwendung und nicht sicher sind, wie die Mitgliedschaft Sachen.
In meinem aktuellen Projekt habe ich diese
Meine eigenen Users Table
und Role Table
ich bin nicht mit asp.net die Mitgliedschaft bringt zu viel Gepäck und passt nicht wie ich möchte das design für meine Datenbank(sicher kann ich es aber es scheint nur, wie zu viel Arbeit)
Einen user
können viele Rollen und ein role
können viele Benutzer.
Ich bin mit EF zu tun, fast alle meine Anrufe an die Datenbank.
In der Vergangenheit Projekte, die ich aus meiner eigenen Authorize Attribute
was haben meine eigenen Aufruf meiner Datenbank und überprüft, um zu sehen, ob der Benutzer in der richtigen Rolle als das, was war erlaubt, die controller/action-Methode.
Nicht gemacht, die Mitgliedschaft bei Anbietern, die ich verlor auf einige der integrierten Funktionen wie z.B. User.IsInRole
. Ich war noch in der Lage zu verwenden User.Identity.Name
aber ich glaube, das war, weil das cookie, das ich eingestellt.
Was ist die beste Praxis Weg, es zu tun jetzt in asp.net mvc 4/web-api?
Beim googeln fand ich "SimpleMembership", aber noch nicht viel gelesen in der es noch nicht.
On a side note kann ich User.Identity.Name
mit meinen webapi, wenn ich einen Benutzer authentifiziert?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein Artikel, der beschreibt, wie erstellen Sie eine benutzerdefinierte autorisieren Attribut für die Web-API verwenden, SimpleMembership. Sie müssen nicht verwenden, SimpleMembership, obwohl es sehr flexibel und einfach zu bedienen. Sie könnte die gleichen Konzepte, die in diesem Artikel und verwenden Sie Ihre membership-Dienst statt, so lange, wie Sie Ihre service können überprüfen, ob ein bestimmter Benutzer in eine Rolle, melden Sie einen Benutzer in die und aus, und stellen Sie sicher, dass Sie authentifiziert sind.
Wenn Ihr service nicht, stellen Sie sicher, dass Sie authentifiziert sind, können Sie mithilfe von User.Identität.IsAuthenticated und können Sie Benutzer.Identität.Name des aktuell angemeldeten usersname; vorausgesetzt, dass der Dienst richtig setzt-Thread.CurrentPrincipal wenn sich ein Benutzer anmeldet. Es ist auch eine empfohlene Praxis zu setzen HttpContext.Aktuelle.Benutzer. Natürlich Sie müssen nicht sorgen zu machen über irgendwelche von diesem, wenn Sie SimpleMembership.
Dieser Brauch autorisieren Attribut unterstützen beide Formen der Authentifizierung und die Standardauthentifizierung im Fall setzen Sie Ihren API ' s an die öffentlichkeit. Anders ist es bei einer autorisieren Attribut verwendet, die auf einem controller, es gibt einen HTTP-status-code Verboten, wenn die nicht autorisierte und nicht-autorisierte, wenn Sie nicht authentifiziert werden; statt der Umleitung auf eine Login Seite.
Könnte man noch schreiben eines benutzerdefinierten mitgliedschaftsanbieters und implementieren nur die Methoden, die Sie verwenden möchten. Soweit die
User.IsInRole
ist besorgt, könnten Sie schreiben eine benutzerdefinierte Rolle, die Anbieter durch Erben von derRoleProvider
Klasse und registrieren Sie es in Ihrer Website.config.Und wenn Sie nicht wollen, verwenden Sie jene, die gebaut-in Funktionen, dann verwenden Sie Sie nicht, und statt zu schreiben
User.IsInRole
schreibenMyService.IsInRole
. Es ist wirklich eine Frage der persönlichen Vorliebe, ob Sie wollen, Rollen Sie Ihre benutzerdefinierte Anbieter, und verwenden Sie die integrierten Funktionen oder schreiben Sie einfach eine service-Schicht, die behandelt wird, dass für Sie. Ich denke die Wahl hängt von vielen Faktoren, die Sie berücksichtigen sollten, und die auf die Besonderheiten Ihres Projekts. Zum Beispiel, wenn Sie in Zukunft beabsichtigen, andere externe Entwickler arbeiten an diesem Projekt, es wäre klüger, entscheiden Sie sich für benutzerdefinierte Mitgliedschaft und die rollenanbieter, weil die Wahrscheinlichkeit, dass die Entwickler wäre mehr vertraut mit dieser API, anstatt zu lernen, Ihre eigene service-Schicht.Thread.CurrentPrincipal
zu den entsprechenden Benutzer. Werfen Sie einen Blick auf eine Beispiel-Implementierung, die ich schrieb, die ist mit einer Mitgliedschaft Anbieter mit Basic-Authentifizierung: stackoverflow.com/a/11536349/29407 In diesem Beispiel habe ich eine benutzerdefinierte handler delegieren, aber man könnte eine Genehmigung filter, wenn Sie auch wollen.