Non è necessario rispondere alla richiesta di autenticazione NTLM (Autenticazione integrata di Windows), il browser deve eseguirla automaticamente, se configurata correttamente. Probabilmente sono anche numerose altre complicazioni.
Fase 1 - Browser
Verificare che il browser possa accedere e inviare le proprie credenziali con un'applicazione web NTLM o premendo il software che si sta sviluppando direttamente prima.
Fase 2 - JavaScript withCredentials attribuiscono
L'errore 401 non autorizzato ricevuto ed i sintomi descritti sono esattamente la stessa cosa quando non ero riuscito a impostare l'attributo 'withCredentials' a 'vero'. Non ho familiarità con jQuery, ma assicurati che il tuo tentativo di impostare quell'attributo abbia esito positivo.
Questo esempio funziona per me:
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "https://localhost:44377/SomeService", true);
xhttp.withCredentials = true;
xhttp.send();
xhttp.onreadystatechange = function(){
if (xhttp.readyState === XMLHttpRequest.DONE) {
if (xhttp.status === 200)
doSomething(xhttp.responseText);
else
console.log('There was a problem with the request.');
}
};
Fase 3 - lato server abilita CORS (opzionale)
ho il sospetto di una delle principali ragioni per le persone finiscono in questa domanda è che si stanno sviluppando uno componente sulla loro stazione di lavoro con un altro componente ospitato altrove. Ciò causa problemi Cross-Origin Resource Sharing (CORS). Esistono due soluzioni:
- Disabilitare CORS nel browser, utile per lo sviluppo quando il lavoro verrà distribuito sulla stessa origine della risorsa a cui accede il codice.
- Abilita CORS sul server: è presente un'ampia lettura su Internet più ampia, ma ciò implica fondamentalmente l'invio di intestazioni che abilitano CORS.
In breve, per consentire CORS con le credenziali è necessario:
- Invia un '-Control-Allow-Origin Access' intestazione che corrisponde l'origine della pagina servito ... questo non può essere '*'
- Invia un 'Access-Control-Allow-credenziali' con il valore 'true'
Qui è il mio codice di lavoro .NET di esempio nel mio file Global.asax. Penso che sia piuttosto facile vedere cosa sta succedendo e tradurre in altre lingue, se necessario.
void Application_BeginRequest(object sender, EventArgs e)
{
if (Request.HttpMethod == "OPTIONS")
{
Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
Response.AddHeader("Access-Control-Max-Age", "1728000");
Response.End();
}
else
{
Response.AddHeader("Access-Control-Allow-Credentials", "true");
if (Request.Headers["Origin"] != null)
Response.AddHeader("Access-Control-Allow-Origin" , Request.Headers["Origin"]);
else
Response.AddHeader("Access-Control-Allow-Origin" , "*"); // Last ditch attempt!
}
}
grande sintesi, gradirebbe implementazione ... –