Domanda Come funziona il tag Authorize? - ASP.NET MVC


In che modo il tag di autorizzazione determina se l'utente è autorizzato o meno?

Come dire, se un utente effettua l'accesso e tenta di accedere a una vista con un tag Autorizza. Come determina se un utente è autorizzato o meno? Fa una query al database e controlla?

Che ne dici se vanno a una vista con un'autorizzazione di ruolo? Esamina la tabella dei ruoli di appartenenza?

Mi chiedo solo perché ho quello che le tabelle di appartenenza ASP.NET considera username duplicati. Io uso un serio di campi per determinare quale utente è cosa, consentendo agli utenti di avere lo stesso nome utente duplicato, ma rimanere unico nel mio database.

Questo mi ha costretto a scrivere metodi personalizzati per molti articoli di appartenenza a .NET poiché utilizzava "userName" per cercare invece di usare UserId.

Quindi mi sto chiedendo se questo potrebbe essere il caso con il tag Autorizza. Dal momento che non ho idea di come funzioni e come se non stavo usando l'abbonamento a .NET non avrei la minima idea di come lo determinerebbe.


30
2017-08-29 05:30


origine


risposte:


Il Authorize tag utilizza tutti i controlli di appartenenza incorporati da ASP.NET. È MOLTO facile interpretare il proprio tag. Per esempio:

public class MyAuthorize : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (httpContext == null) throw new ArgumentNullException("httpContext");

        // Make sure the user is authenticated.
        if (httpContext.User.Identity.IsAuthenticated == false) return false;

        // Do you own custom stuff here
        bool allow = CheckIfAllowedToAccessStuff();

        return allow;
    }
}

È quindi possibile utilizzare il [MyAuthorize] tag che utilizzerà i tuoi assegni personalizzati.


26
2017-08-29 06:01



ControllerActionInvoker analizza l'attributo e le chiamate OnAuthorization() su di esso quando è il momento di verificare le credenziali.

Il AuthorizationAttribute.OnAuthorization() il metodo controlla sostanzialmente per vedere se User.Identity.IsAuthenticated è vero o no. Ciò si basa solo sulla funzionalità di FormsAuthentication o su qualsiasi altro schema di autenticazione che si sta utilizzando.


15
2017-08-29 05:58