Domanda

Ho un attributo di autenticazione super semplice che sto cercando di implementare in un'applicazione ASP.NET MVC 5 e sto avendo qualche problema. Voglio che l'attributo venga applicato a livello globale, ad eccezione di azioni specifiche all'interno di un controller (ad esempio il modulo di accesso e la home page).

Ho provato a decorare l'azione con l'attributo [OverrideAuthentication] senza fortuna. Mi dà un errore di reindirizzamento del loop perché l'applicazione è ancora in esecuzione l'autenticazione sul modulo di accesso e continua a cercare di reindirizzare il modulo di accesso oltre e oltre.

ha chiunque altro abbia visto questo comportamento? Qualche idea di cosa ho riempito qui?

A titolo di esempio, ho creato un filtro super semplice che non è attualmente insigliato:

public class BasicAuthenticationAttribute
    : ActionFilterAttribute, IAuthenticationFilter
{

    public void OnAuthentication(AuthenticationContext filterContext)
    {
        throw new NotImplementedException();
    }

    public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
    {
        throw new NotImplementedException();
    }
}
.

Se decoro il mio controller / azione come questo:

[BasicAuthentication]
public class AccountController : Controller
{
    [HttpGet]
    [OverrideAuthentication]
    public ActionResult Login()
    {
        return View();
    }
}
.

ottengo un'eccezione non implementata quando navigo verso l'azione di accesso, anche se tale azione non dovrebbe essere in esecuzione il codice di autenticazione. Ho frainteso come dovrebbero il lavoro le sostituzioni?

È stato utile?

Soluzione

Penso che tu abbia confuso l'autenticazione con l'autorizzazione (come fanno molte persone).Non ha senso effettuare un [BasicautenticataTtribute] e registrarlo a livello globale, poiché l'autenticazione avviene solo al login, non su ogni richiesta.

Autorizzazione è ciò che avviene dopo che l'utente ha effettuato l'accesso per verificare se l'utente ha i privilegi richiesti per eseguire un'azione specifica, e ha senso fare autorizzazione a livello globale.L'autorizzazione in MVC è gestita dal [Authorizeattribute] e è possibile ereditarlo se è necessario personalizzare il modo in cui viene eseguito il controllo dell'autorizzazione.Puoi anche registrarlo come filtro globale.

Il [AllowananonyonAttribute] funziona in combinazione con [Authorizattribute], e fondamentalmente lo dice di saltare il controllo dell'autorizzazione.Va inoltre notato che [AllowananonyonAttribute] non avrà alcun effetto a meno che non venga utilizzato con il [Authorizeattribute].

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top