Conexões de domínio cruzado SignalR com auto-hospedagem e autenticação
Eu tenho um problema de CORS quando auto-hosting SignalR com OWIN, o que só acontece quando eu tento habilitar a autenticação.
O erro que recebo no meu navegador é:
XMLHttpRequest não pode carregarhttp: //.../signalr/negotiate? [snip] Origem ... não é permitida pelo Access-Control-Allow-Origin
Isso só acontece se eu habilitar a autenticação em meu servidor auto-hospedado usando a abordagem emesta resposta:
public void Configuration(IAppBuilder app)
{
var listener = (HttpListener)app.Properties[typeof(HttpListener).FullName];
listener.AuthenticationSchemes = AuthenticationSchemes.Ntlm;
app.MapHubs(new HubConfiguration { EnableCrossDomain = true });
}
Se eu comentar oAuthenticationSchemes
linha então CORS funciona (e eu verifiquei tudo emestas instruções). Eu recebo o mesmo problema se eu usar outros esquemas de autenticação que o NTLM.
Usando o Fiddler para examinar o que está acontecendosem Autenticação ativada Eu vejo os cabeçalhos necessários do CORS voltando do servidor:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: [meu servidor]
No entanto, uma vez que eu ative a autenticação, recebo uma resposta 401 que não possui esses cabeçalhos. Todos os pedidos têm o necessárioOrigin
cabeçalho.
Tendo examinado o SignalRCódigo fonte parece que os cabeçalhos estão sendo definidos, mas presumivelmente com a autenticação habilitadaHttpListener
está enviando a resposta 401 inicial sem acertar este código.
Então eu acho que a minha pergunta é: como faço para obter oHttpListener
para incluir umAccess-Control-Allow-Origin
cabeçalho em sua negociação de protocolos de autenticação?