Ho letto un sacco di domande e risposte su questo argomento, ma nessuno di loro mi ha aiutato a risolvere questo problema.IPrincipal personalizzato non accessibile in MVC5
Il problema che sto avendo è che la proprietà HttpContext.Current.User
o solo User
è di tipo RolePrincipal
invece del mio principal personalizzato.
Questa è un'app Web MVC 5 che utilizza l'autenticazione di Windows (solo per l'intranet). Il mio principal personalizzato è una sottoclasse di WindowsPrincipal
e ho implementato il mio RoleProvider
per l'utilizzo nei tag di attributo Authorize.
Quando si tenta di utilizzare il principal trasferendolo al mio principal personalizzato da IPrincipal
sul HttpContext corrente, viene visualizzato un errore che indica che è di tipo RolePrincipal, che ovviamente non può essere convertito nel mio principal personalizzato. Sto impostando il principale personalizzato in caso Application_PostAuthenticationRequest
:
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);
}
}
Quando ho messo un punto di interruzione nel metodo che sembra mai ottenere chiamato, che può spiegare perché non è sempre impostato la mia principale personalizzato.
ho rivisto il seguente Qas, ma non sono riuscito a risolvere il problema:
- using custom IPrincipal and IIdentity in MVC3 - Aggiunta la registrazione del gestore di eventi nel metodo Init di Global.asax.cs. Non sembra fare la differenza. Anche la variabile
_application
non risultava valida in MVC5. - RoleProvider dosn't work with custom IIdentity and IPrincipal on server - Apporta le modifiche nel file web.config, ma questo ha causato vari errori durante il runtime con errori che indicano che la pipeline ASP.NET è configurata in modo errato.
Che cosa sto facendo in modo errato per non avere il Preside impostato? Fammi sapere se è necessario pubblicare più codice.
MODIFICA: L'impostazione di HttpContext.Current.User sul mio principal personalizzato nell'evento WindowsAuthentication.OnAuthenticate non risolve questo problema. Lo stesso identico comportamento è esibito usando quel metodo.
Lo stesso comportamento è mostrato utilizzando l'evento 'WindowsAuthentication.OnAuthenticate'. – JNYRanger