È possibile eseguire un servizio Web REST con API che richiede che i client utilizzino l'autenticazione di base. Abbiamo creato una serie di campioni accurati in varie lingue che mostrano come interfacciarsi con il nostro servizio. Ora sto rivedendo registri di IIS del servizio e vedere che il seguente schema accade abbastanza spesso:Perché il mio servizio REST, i client .NET, inviano ogni richiesta senza intestazioni di autenticazione e quindi ritentano con l'intestazione di autenticazione?
- arriva una richiesta, viene respinto con il codice HTTP 401
- la stessa richiesta viene inviato nuovamente e riesce
che sembra che la prima richiesta venga inviata senza Autorizzazione intestazioni e quindi la seconda viene inviata con le intestazioni corrette e ha esito positivo. La maggior parte delle volte il registro contiene "user-agent", la stessa stringa che abbiamo inserito nel nostro esempio .NET.
Quindi presumo che il problema sia solo con i programmi .NET. Il problema non è riprodotto con il nostro codice di esempio, quindi presumo che gli utenti abbiano modificato il codice in qualche modo o ne abbiano scritto da zero.
Abbiamo provato a contattare gli utenti ma a quanto pare non vogliono investire tempo nella ricerca. Quindi sarebbe bello scoprire quale sia lo scenario più probabile che porta a questo comportamento dei programmi .NET.
Perché dovrebbero farlo? Perché non dovrebbero attaccare le intestazioni al primo tentativo?
Questa soluzione funziona bene come consente di impostare l'intestazione di autorizzazione sulla prima richiesta, evitando così la sfida/risposta 401. Nella mia esperienza con HttpClient e HttpClientHandler, tuttavia, l'impostazione di pre-autenticazione funziona in quanto l'intestazione Autorizza è impostata su ogni richiesta dopo il completamento della Sfida/Risposta 401. Questo articolo lo spiega bene: http://weblog.west-wind.com/posts/2010/Feb/18/NET-WebRequestPreAuthenticate-not-quite-what-it-sounds-like – Philippe
@Philippe: Sì, funziona pure. Grazie. – sharptooth
Suggerimento: per il proxy si dovrebbe invece impostare l'intestazione 'client.DefaultRequestHeaders.ProxyAuthorization'. – stil