ServiceStack Web-Services-Sicherheit

8

Hi Ich bin neu mit Servicestack zu arbeiten und habe ihr sehr umfangreiches Bootstrapapi-Beispiel heruntergeladen und arbeite damit, habe aber immer noch einige Probleme. Das Problem ist mit Sicherheit, was passiert, wenn ich 405 Fehler beim Zugriff auf die geschützten Dienste bekomme. Mit dem Authentifizierungsdienst scheint es, dass ich mich korrekt authentifiziere. Bitte helfen und erklären. Hier ist der Code:

%Vor%

Die Dienstleistungen:

%Vor%

Hier ist der AppHost:

%Vor%

AKTUALISIEREN

Alles funktioniert wie erwartet, wenn Sie ersetzen: RestServiceBase mit: ISevice also ist jetzt die Frage warum.

    
Chris 23.08.2012, 15:26
quelle

1 Antwort

23

Überprüfen Sie zuerst die Wiki-Dokumentation

Ich würde zuerst die Dokumentation in ServiceStacks Authentifizierungs-Wiki durchgehen, um eine bessere Vorstellung davon zu bekommen wie die Authentifizierung von ServiceStack funktioniert. Es gibt eine Menge Dokumentation im Wiki. Wenn du dir also nicht sicher bist, solltest du dich zuerst darauf beziehen. Es ist ein Community-Wiki, also kannst du gerne erweitern, was es ist, wenn du denkst, es könnte anderen helfen.

Siehe die Implementierung im Quellcode, wenn das Verhalten nicht klar ist

Wenn Sie nicht sicher sind, was Sie tun sollten, beziehen Sie sich auf den RequiredRole-Quellcode als die Hauptautorität, wie es funktioniert. RequiredRole ist nur ein Filteranforderungsattribut , das vor jedem Service mit diesem Attribut ausgeführt wird.

Das RequiredRole-Attribut ruft nur Ihre session.HasRole() -Methode als auf hier gesehen :

%Vor%

Da Ihre Sitzung gerade aufgerufen wird, können Sie die Implementierung von session.HasRole() überschreiben, wenn Sie eine benutzerdefinierte Sitzung haben.

Registrierung und Implementierung einer CustomUserSession

Das Social BootstrapApi-Projekt implementiert eine eigene CustomSession , die es enthält registriert sich hier , überschreibt jedoch nicht die HasRole() -Implementierung Es verwendet die integrierte Implementierung in der Basis AuthUserSession.HasRole ( ) , die einfach wie die Roles-Auflistung aussieht, um zu sehen, ob der Benutzer die angegebene Rolle in seiner Session POCO hat:

%Vor%

Sitzungseigenschaften, die von AuthUserRepository

aufgefüllt werden

Die Eigenschaft Rollen (wie auch die meisten anderen Eigenschaften in einer Benutzersitzung) wird vom AuthUserRepository ausgefüllt, das Sie z. wenn Sie das OrmLiteAuthRepository wie SocialBootstrapApi tut dies hier , da das Rollenattribut in den Rollen Spalte in der UserAuth-RDBMS-Tabelle . Abhängig vom AuthUserRepository werden die UserAuth / UserOAuthProvider POCOs als RDBMS-Tabellen in OrmLite oder als Textblobs in Redis, etc.

gespeichert

Verwalten Sie Rollen und Berechtigungen mit AssignRoles / UnAssignRoles-Diensten

Damit ein Benutzer die erforderliche Rolle (und die Berechtigung zum Übergeben) hat, sollte diese Rolle zu seinem UserAuth-Db-Zeileneintrag hinzugefügt werden. ServiceStacks AuthFeature enthält zwei Dienste zum Verwalten von Benutzerberechtigungen und -rollen:

So geben Sie jemandem zunächst die Administratorrolle

Für diese Dienste ist ein Benutzer mit der Administratorrolle bereits authentifiziert sein. Sie können dies tun, indem Sie die Spalte UserAuth.Role eines bestimmten Benutzers manuell so ändern, dass sie den Wert "Admin" enthält. Das Social Bootstrap-API-Projekt verarbeitet stattdessen das OnAuthenticated() -Ereignis auf seinem CustomUserSession , die einfach überprüft, ob der authentifizierte Benutzername in der Web.Config deklariert ist, und wenn dies der Fall ist, ruft der AssignRoles-Dienst den authentifizierten Benutzer als Admin auf:

%Vor%     
mythz 23.08.2012, 17:10
quelle