Połączenia międzydomenowe SignalR z własnym hostowaniem i uwierzytelnianiem
Mam problem z CORS podczas samodzielnego hostowania SignalR z OWIN, co zdarza się tylko, gdy próbuję włączyć uwierzytelnianie.
Błąd w mojej przeglądarce to:
XMLHttpRequest nie może się załadowaćhttp: //.../signalr/negotiate? [snip] Pochodzenie ... nie jest dozwolone przez Kontrolę dostępu-Pozwolenie-Pochodzenie
Dzieje się tak tylko wtedy, gdy włączę uwierzytelnianie na moim serwerze hostowanym przy użyciu podejścia wta odpowiedź:
public void Configuration(IAppBuilder app)
{
var listener = (HttpListener)app.Properties[typeof(HttpListener).FullName];
listener.AuthenticationSchemes = AuthenticationSchemes.Ntlm;
app.MapHubs(new HubConfiguration { EnableCrossDomain = true });
}
Jeśli komentujęAuthenticationSchemes
line następnie CORS działa (i wszystko sprawdziłemte instrukcje). Mam ten sam problem, jeśli używam innych schematów uwierzytelniania niż NTLM.
Używając Skrzypka, aby sprawdzić, co się dzieje,bez włączone uwierzytelnianie Widzę niezbędne nagłówki CORS wracające z serwera:
Access-Control-Allow-Credentials: true
Kontrola dostępu-Zezwól-Pochodzenie: [mój serwer]
Jednak po włączeniu uwierzytelniania otrzymuję odpowiedź 401, w której brakuje tych nagłówków. Wszystkie prośby są niezbędneOrigin
nagłówek.
Po zbadaniu SignalRkod źródłowy wygląda na to, że nagłówki są ustawiane, ale prawdopodobnie z włączonym uwierzytelnianiemHttpListener
wysyła początkową odpowiedź 401 bez trafienia w ten kod.
Myślę więc, że moje pytanie brzmi: jak zdobyćHttpListener
zawieraćAccess-Control-Allow-Origin
nagłówek w negocjowaniu protokołów uwierzytelniania?