ASP.NET MVC Single Sign-On und Rollen

8

Ich habe ein grundlegendes Single Sign-On, das über zwei MVC-Sites funktioniert (nennen Sie SiteA und SiteB), indem Sie etwas nach der folgenden Methode verwenden:

Ссылка

Sie befinden sich in Unterdomänen derselben Domäne und teilen Hash- und Verschlüsselungsschlüssel usw. in web.config. Ich habe den Cookie so geändert, dass er für alle Sites in derselben Domain zugänglich ist. All das scheint in Ordnung zu sein.

Die Websites befinden sich auf separaten Servern ohne Zugriff auf die gleiche SQL-Datenbank. Daher enthält nur SiteA die Anmeldedaten für den Benutzer. SiteB hat eine Mitgliedschaftsdatenbank, aber mit leeren Benutzern.

Dies funktioniert gut für mein erforderliches Szenario, das ist:

1) Der Benutzer meldet sich bei SiteA an

2) Die Anwendung lädt Daten von SiteA (von AJAX) und SiteB (von AJAX mit JSONP)

Ich habe die folgende LogOn Aktion auf meinem AccountController für SiteA, wo die "Magie" passiert:

%Vor%

Das macht einige Dinge, die ich für das Ausgangsszenario nicht unbedingt brauche, sondern bezieht sich auf meine Frage. Er fügt die Roles-Liste für den Benutzer bei der Anmeldung bei SiteA in die UserData des Authentifizierungstickets ein. Dies wird dann auf SiteB durch das folgende in global.asax "wiederhergestellt":

%Vor%

Alles oben beschriebene funktioniert, bis ich Rollen in den Mix einfüge. Die Dinge funktionieren gut, wenn ich meine Controllers \ Actions on SiteB nur mit Attributen von [Authorize] dekoriere. Aber sobald ich [Authorize (roles="TestAdmin")] hinzufüge, können Benutzer nicht mehr auf diese Controller-Aktion zugreifen. Offensichtlich habe ich den Benutzer der TestAdmin Rolle hinzugefügt.

Wenn ich den global.asax-Code auf SiteB debugge, sieht es okay aus, wenn ich den global.asax-Code verlasse, ABER dann, wenn ich einen Unterbrechungspunkt im Controller selbst treffe, sind Controller.User und Controller.HttpContext.User jetzt ein System.Web.Security.RolePrincipal ohne die Rollen, die nicht mehr festgelegt werden.

Also meine Frage ist: Hat jemand eine Idee, wie ich die Rollen auf SiteB oder eine andere Möglichkeit wiederherstellen kann?

    
mutex 30.08.2010, 01:18
quelle

2 Antworten

2

Sie haben es bereits ausgearbeitet, aber hier sind wir:

Damit es funktioniert: deaktivieren Sie den Rollenmanager. Es ist kein merkwürdiges Verhalten, dass asp.net das tut, da Sie es ausdrücklich sagen, dass Sie die Rollen des Benutzers mit Konfiguration angegeben .

Eine andere Möglichkeit: Aktivieren Sie den Rollenmanager in beiden. Verwenden Sie die Konfiguration , um den Cookie wie Sie zu teilen tun in Ihrem benutzerdefinierten Code. Basierend auf Ihrer Beschreibung sollten Sie sich keine Gedanken darüber machen müssen, ob Sie versuchen, Rollen für den Benutzer abzurufen, solange Sie eine übereinstimmende Konfiguration für das Authentifizierungs-Cookie verwenden

Sollten Sie Application_AuthorizeRequest verwenden, um die Rollen für Cookies festzulegen? imho Meinung früher (Authenticate) ist am besten, ich habe es immer so gemacht und nie in Probleme geriet.

    
eglasius 06.09.2010, 09:10
quelle
2

Da dies scheinbar stagniert ist, kann ich dieses mit einigen zusätzlichen Ergebnissen teilweise beantworten. Nach dem Debuggen \ teste dies ein bisschen mehr, es scheint, MVC2 macht etwas seltsam nach dem Verlassen von Application_AuthenticateRequest, aber bevor Sie meinen Controller eingeben. Mehr Details hier:

Ссылка

Eine Problemumgehung besteht darin, Application_AuthorizeRequest anstelle von Application_AuthenticateRequest zu verwenden.

BEARBEITEN: Ich glaube, ich habe die Ursache meiner Probleme gefunden. In meinem MVC1-Projekt hatte ich den rollerManager deaktiviert, aber mein MVC2-Testprojekt hatte den rollerManager aktiviert. Sobald ich meinen roleManager im MVC1-Testprojekt aktiviert habe, ist das Verhalten zwischen MVC1 und MVC2 gleich. Ich habe auch eine Frage an einen der MVC Microsoft Team offen darüber, und wird hier zurück posten, wenn Application_AuthorizeRequest der richtige Ort ist, um die Rollen von Authentication Ticket Cookie wiederherzustellen ...

    
mutex 30.08.2010 22:32
quelle