Ich habe eine Menge Fragen und Antworten zu diesem Thema gelesen, aber keiner von ihnen hat mir geholfen, dieses Problem zu lösen.Benutzerdefinierte IPrincipal nicht zugänglich in MVC5
Das Problem, das ich habe, ist, dass die HttpContext.Current.User
oder nur User
Eigenschaft vom Typ RolePrincipal
anstelle von meinem benutzerdefinierten Prinzipal ist.
Dies ist eine MVC 5-Webanwendung mit Windows-Authentifizierung (Intranet-Anwendung). Mein benutzerdefinierter Prinzipal ist eine Unterklasse von WindowsPrincipal
, und ich habe meine eigene RoleProvider
zur Verwendung in Autorize-Attribut-Tags implementiert.
Wenn ich versuche, den Prinzipal zu verwenden, indem ich es auf meine benutzerdefinierte Prinzipal aus IPrincipal
auf dem aktuellen HttpContext werfen, erhalte ich eine Fehlermeldung, dass es vom Typ RolePrincipal ist, die natürlich nicht zu meinem benutzerdefinierten Prinzipal gegossen werden kann. Ich gründe mein benutzerdefiniertes Haupt im Application_PostAuthenticationRequest
Ereignisse:
protected void Application_PostAuthenticationRequest(object sender, EventArgs e)
{
if (User == null)
return;
using(EntityContext db = new EntityContext())
{
var user = db.Users.SingleOrDefault(u => u.ADName.Equals(User.Identity.Name));
HttpContext.Current.User = new PcsPrincipal((WindowsIdentity)User.Identity, user);
}
}
Als ich in diesem Verfahren einen Haltepunkt setzte es scheint nie aufgerufen, was erklären könnte, warum es nicht zu meinem benutzerdefiniertes Haupt gesetzt zu werden.
Ich habe die folgende QAs prüft, aber sie haben es nicht gelungen, das Problem zu beheben:
- using custom IPrincipal and IIdentity in MVC3 - die Registrierung der Event-Handler in Global.asax.cs Init-Methode hinzugefügt. Scheint keinen Unterschied zu machen. Auch die Variable schien in MVC5 ungültig zu sein.
- RoleProvider dosn't work with custom IIdentity and IPrincipal on server - Die Änderungen wurden in der Datei "web.config" vorgenommen, dies führte jedoch während der Laufzeit zu verschiedenen Fehlern, die darauf hinwiesen, dass die ASP.NET-Pipeline falsch konfiguriert ist.
Was mache ich falsch, um das Prinzipal nicht zu haben? Lassen Sie mich wissen, ob mehr Code veröffentlicht werden muss.
BEARBEITEN Sie: Das Festlegen des HttpContext.Current.User zu meinem benutzerdefinierten Prinzipal in dem WindowsAuthentication.OnAuthenticate-Ereignis löst dieses Problem nicht. Das exakt gleiche Verhalten zeigt sich mit dieser Methode.
Das gleiche Verhalten wird mit dem Ereignis "WindowsAuthentication.OnAuthenticate" angezeigt. – JNYRanger