11 messaggi dal 11 agosto 2013
Grande!!! funziona finalmente!!! Ho scoperto che quando mettevo il tuo codice mi dava questo errore : This operation requires IIS integrated pipeline mode. L'ho risolto attivando su Gestione IIS>Application Pool>DefaultAppPool>Basic Settings>Integrated.
Sicuramente lo sapevi , lo dico giusto per qualcuno che magari avrà il mio stesso problema!

Ancora grazie!
11 messaggi dal 11 agosto 2013
Ciao ,
ho provato a fare come dicevi te per il delegatinghandler visto che ovviamente mi chiedeva le credenziali ovunque.
Ora me le chiede solo per le web api.
Una domanda : come faccio a far chiedere le credenziali solo a particolari metodi delle web api?
Praticamente anche dove non metto [authorize] lui mi chiede le credenziali. Ho provato a non metterle e mi fa passare ! quindi immagino che si debba gestire il caso in cui non ci sia "authorize" sul metodo senza che mi faccia apparire la richiesta delle credenziali!

Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

red ha scritto:

Praticamente anche dove non metto [authorize] lui mi chiede le credenziali.

Puoi fare questo: in mancanza dell'intestazione Authorization, non emettere la challenge e non terminare la richiesta con codice 401.

Sarà poi l'attributo Authorize a bloccare la richiesta se nessuna IPrincipal era stata impostata dal delegating handler.

Questa soluzione apre un'altra questione che magari reputi di poco conto: quando provi ad accedere dal browser ad un'action che richiede autenticazione, il server non ti invierà più la challenge e tu vedrai apparire subito un errore 401 senza avere la possibilità di inserire username e password.

Pensi che sia un problema? Finché fai i test con Fiddler o Postman, la mancanza della challenge non ti causerà disappunto. Del resto il client tipico di una API è un'applicazione, non un browser.

Comunque, se non vuoi proprio rinunciare ad emettere la challenge, puoi pur sempre crearti un tuo filtro che deriva da AuthorizeAttribute e farla emettere a lui. Per esempio prova:
public class AuthorizeBasicAttribute : AuthorizeAttribute
{
    protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        var autorizzato = base.IsAuthorized(actionContext);
        if (!autorizzato)
        {
            actionContext.Response.Headers.Add("WWW-Authenticate", "Basic");
        }
        return autorizzato;
    }
}

e poi decori le action con [AuthorizeBasic] oppure, meglio, adotti l'approccio del white-listing: lo imposti come filtro globale per proteggere l'intera WebAPI e poi usi [AllowAnonymous] sulle actions accessibili da tutti.

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.