CORS en el problema de IIS con credenciales y comodines en Access-Control-Allow-Origin

Heredé un sitio bastante básico que sirve datos y maneja algunas conexiones de socket. Está ejecutando NodeJS detrás de IIS usando iisnode como puente. Todo eso funciona bien desde la perspectiva de "servir páginas normales".

Parte del problema es que las conexiones reales al servidor provienen de clientes de escritorio donde el contenido se carga a través de una aplicación diferente como un gadget y de partes potencialmente cambiantes y variables de la red, dispositivos móviles, etc., etc., es decir, un número desconocido de dominios de cliente.

Ya configuré el origen de Access-Control-Allow en * para abrir las puertas del establo, pero ahora recibo el siguiente error en el cliente:

11: 29: 57.668 Solicitud de origen cruzado bloqueada: la misma política de origen no permite leer el recurso remoto en ‘http: //server/socket.io/? EIO = 3 & transport = polling & t = 1486150196479-0’. (Motivo: la credencial no es compatible si el encabezado CORS "Access-Control-Allow-Origin" es "*"). 1 (desconocido)

Intenté establecer las credenciales de acceso-control-permitir-explícitamente en falso (así como verdadero, así como omitirlo por completo), pero ninguno de mis intentos me ha permitido superar esto.

Los encabezados de respuesta sin formato se ven así actualmente:

Access-Control-Allow-Credentials: false
Access-Control-Allow-Headers: Origin,Content-Type,Accept
Access-Control-Allow-Methods: GET,HEAD,PUT,POST,DELETE,OPTIONS
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Content-Encoding: gzip
Content-Length: 969
Content-Type: text/html
Date: Fri, 03 Feb 2017 19:30:21 GMT
Server: Microsoft-IIS/8.5
Vary: Accept-Encoding
X-Powered-By: ASP.NET

Parece que no puedo resolver después de mirar MUCHOS sitios y artículos de CORS en los últimos días por qué todavía se queja de Credenciales, y más específicamente, ¿cómo puedo solucionar esto?

¡Gracias!

ACTUALIZACIÓN 2017-02-06

El código del cliente no es terriblemente emocionante. Dado que el servidor es NodeJS detrás de IIS, todo lo que realmente estoy haciendo para esto es implementar una conexión de socket:

var socket = io('http://' + currentServer, {path: '/broadcast/socket.io', reconnection: false, forceNew: true});
socket.on('update message', function (data) {
// do some fancy things
}

Esto funciona desde el mismo dominio.

También he estado cavando un poco más en base a los comentarios de sidehowbarker que me llevaron a estoartículo Hay algunos pasos adicionales para agregar las variables y algunas otras cosas para que esa pieza funcione.

Mi applicationHost.config actualmente contiene esta sección:

<location path="Default Web Site">
    <system.webServer>
        <rewrite>
            <allowedServerVariables>
                <add name="CAPTURED_ORIGIN" />
                <add name="RESPONSE_Access-Control-Allow-Origin" />
            </allowedServerVariables>
        </rewrite>
    </system.webServer>
</location>

y mi web.config está aquí:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
    <rewrite> 
        <rules>
            <rule name="Fail bad requests">
                <match url="." />
                <conditions>
                    <add input="{HTTP_HOST}" negate="true" pattern="localhost" />
                </conditions>
                <action type="AbortRequest" />
            </rule>
            <rule name="Capture Origin Header"> 
                <match url=".*" /> 
                <conditions> 
                    <add input="{HTTP_ORIGIN}" pattern=".+" /> 
                </conditions> 
                <serverVariables> 
                    <set name="CAPTURED_ORIGIN" value="{C:0}" /> 
                </serverVariables> 
                <action type="None" /> 
            </rule>
        </rules>
        <outboundRules> 
            <rule name="Set-Access-Control-Allow-Origin for known origins"> 
                <match serverVariable="RESPONSE_Access-Control-Allow-Origin" pattern=".+" negate="true" /> 
                <!--<action type="Rewrite" value="{C:0}" /> -->
            </rule> 
        </outboundRules> 
    </rewrite>
    <tracing>
        <traceFailedRequests>
            <add path="*">
                <traceAreas>
                    <add provider="ASP" verbosity="Verbose" />
                    <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
                    <add provider="ISAPI Extension" verbosity="Verbose" />
                    <add provider="WWW Server," areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,FastCGI,WebSocket" verbosity="Verbose" />
                </traceAreas>
                <failureDefinitions statusCodes="400-599" />
            </add>
        </traceFailedRequests>
    </tracing>
</system.webServer>
</configuration>

en el outboundRules Actualmente tengo la línea type = "Rewrite" comentada porque cuando habilito eso, arroja un error.

HTTP Error 500.52 - URL Rewrite Module Error.

The page cannot be displayed because an internal server error has occurred.

Most likely causes:
•IIS received the request; however, an internal error occurred during the processing of the request. The root cause of this error depends on which module handles the request and what was happening in the worker process when this error occurred.
•IIS was not able to access the web.config file for the Web site or application. This can occur if the NTFS permissions are set incorrectly.
•IIS was not able to process configuration for the Web site or application.
•The authenticated user does not have permission to use this DLL.
•The request is mapped to a managed handler but the .NET Extensibility Feature is not installed.

Detailed Error Information:
Module: RewriteModule 
Notification: SendResponse 
Handler: StaticFile 
Error Code: 0x80070585 

Requested URL: http://localhost:80/iisstart.htm 
Physical Path: C:\inetpub\wwwroot\iisstart.htm 
Logon Method: Anonymous 
Logon User: Anonymous 
Request Tracing Directory: C:\inetpub\logs\FailedReqLogFiles 

Los registros de solicitud fallidos no son demasiado útiles, muestran lo siguiente para la advertencia:

411.  -MODULE_SET_RESPONSE_ERROR_STATUS 
ModuleName: RewriteModule 
Notification: SEND_RESPONSE 
HttpStatus: 500 
HttpReason: URL Rewrite Module Error. 
HttpSubStatus: 52 
ErrorCode: Invalid index. (0x80070585) 
ConfigExceptionInfo: 

Respuestas a la pregunta(3)

Su respuesta a la pregunta