Ich habe seit ein paar Tagen nach einer Antwort auf diese Frage gesucht, aber ich habe keinen Erfolg gefunden. Ich würde die Links posten, aber es würde wahrscheinlich die ganze Seite einnehmen.Hinzufügen von Rollen zu ADFS IPrincipal
Also hier ist, was ich habe ...
ich eine MVC-Anwendung haben, die die WC-Federation-Protokoll verwendet. Ich war in der Lage, die Anwendung so zu konfigurieren, dass sie die Benutzer authentifiziert und die Ansprüche von ADFS zurückgibt. Das funktioniert perfekt. Ich kann auch alle Ansprüche ohne Probleme extrahieren. Aber ich mache das innerhalb einer der Aktionen im Controller.
Und hier ist es, was ich tun will ...
Ich möchte ADFS verwenden, um den Benutzer zu authentifizieren, aber ich möchte meine eigenen internen Rollen verwenden, um den Benutzer zu autorisieren den Zugriff auf bestimmte Steuerungen (zB [Authorize(Roles = "CoolRole")]
.) Ich möchte in der Lage sein, dies zu tun, weil ich bereits eine Web-API, die OAuth 2.0 verwendet, mit einer Back-End-SQL Server-Datenbank zur Verwaltung von Benutzern und Rollen (interne und externe Benutzer). Ich möchte jetzt ein sicheres Portal Ermöglichen Sie internen Benutzern den Zugriff auf die Daten mit einer Single-Sign-On-Erfahrung. Mit Blick auf das Controller
Modell, bemerkte ich, es gibt einige Eigenschaften mit dem Authentifizierungsprozess verbunden (OnAuthentication
, OnAuthenticationChallenge
) und einem für das Zulassungsverfahren (OnAuthorization
.)
ich nicht unbedingt den Code benötigen, aber ich fühle mich wie ich Ich habe einen Stein getroffen und ich muss in die richtige Richtung zeigen.
UPDATE
Ich versuchte dies:
protected override void OnAuthorization(
System.Web.Mvc.AuthorizationContext filterContext)
{
//Private class to create a new IPrincipal based on my AppUserMgr
var user = _setCurrentUser(
(ClaimsIdentity)filterContext.HttpContext.User.Identity);
filterContext.HttpContext.User = user;
base.OnAuthorization(filterContext);
}
Dies ergab eine 401 (Unauthorized) Antwort.
und ...
protected override void OnAuthentication(
System.Web.Mvc.Filters.AuthenticationContext filterContext)
{
//Private class to create a new IPrincipal based on my AppUserMgr
var user = _setCurrentUser(
(ClaimsIdentity)filterContext.HttpContext.User.Identity);
filterContext.Principal = user;
base.OnAuthorization(filterContext);
}
dies nur der STS mehrmals aufruft, bevor sie ausfällt. Ich habe sogar versucht nach der Zuweisung zu swappen, nachdem die Base in beiden aufgerufen wird. Kein Glück.
Vor den vorherigen, ich habe auch versucht, eine AuthorizeFilter zum Steuerelement hinzuzufügen, aber das half auch nicht:
http://pratapreddypilaka.blogspot.in/2012/03/custom-filters-in-mvc-authorization.html
Können Sie Ihre Implementierung teilen. Hast du ein Template in git? – Avi