Compartir a través de


Autenticación con varios encabezados conocidos

La estructura de HTTP_MULTIPLE_KNOWN_HEADERS permite a las aplicaciones de servidor enviar varios desafíos de autenticación al cliente. Las aplicaciones pueden desafiar al cliente con un único esquema de autenticación proporcionando el httpHeaderWwwAuthenticate tipo de enumeración del KnownHeaders miembro de la estructura de HTTP_RESPONSE_HEADERS contenida en HTTP_RESPONSE. Sin embargo, cuando el servidor se enfrenta a varios esquemas de autenticación, la aplicación usa la estructura HTTP_MULTIPLE_KNOWN_HEADERS para proporcionar los tipos de autenticación.

Cuando la marca HTTP_RESPONSE_INFO_FLAGS_PRESERVE_ORDER está presente, HTTP envía los encabezados de autenticación en el orden especificado. Si la marca no está presente, HTTP ordena los esquemas de autenticación de más fuerte a débil de la siguiente manera:

  1. Negociar
  2. NTLM
  3. Digerir
  4. Básico

Si el esquema de autenticación no es uno de estos esquemas, la aplicación debe especificar la marca HTTP_RESPONSE_INFO_FLAGS_PRESERVE_ORDER.

El miembro KnownHeader de HTTP_MULTIPLE_KNOWN_HEADERS apunta a una matriz de estructuras de HTTP_KNOWN_HEADER. El miembro pRawValue de la estructura HTTP_KNOWN_HEADER debe apuntar a una cadena que especifique el nombre del esquema. HTTP analiza la cadena para determinar el esquema y realiza una de las siguientes acciones:

  • Si la cadena contiene un tipo de autenticación desconocido o si el tipo de autenticación no está habilitado en el grupo de configuración (ya sea el grupo de direcciones URL o la sesión de servidor) asociado a la solicitud, la API del servidor HTTP anexa la cadena en pRawValue al encabezado WWW-Authenticate. Por ejemplo, si la aplicación especifica un esquema de autenticación no compatible y pRawValue contiene la cadena "CustomAuthString", el texto siguiente se anexa al encabezado de autenticación:

    WWW-Authenticate: CustomAuthSchemeCRLF

    Si la aplicación no tiene habilitada la autenticación básica y pRawValue contiene la cadena "Basic realm="BasicRealm"", el encabezado de autenticación contiene el texto siguiente:

    WWW-Authenticate: Realm="BasicRealm"

  • Si la cadena contiene un tipo de autenticación conocido y está presente en el grupo de configuración (ya sea el grupo de direcciones URL o la sesión del servidor) asociado a la solicitud, la API del servidor HTTP genera el encabezado WWW-Authenticate. Por ejemplo, si la cadena especificada en pRawValue es "Digest" y Digest está habilitada en la sesión del servidor, la API del servidor HTTP anexa el texto siguiente al encabezado de autenticación:

    WWW-Authenticate: Digest realm="testrealm@host.com"

Si el esquema del pRawValue miembro de HTTP_KNOWN_HEADER es Negotiate o NTLM, el nombre del esquema de autenticación es suficiente. Si el esquema especificado es Básico, el nombre del dominio kerberos se anexa al nombre del esquema; la aplicación no necesita proporcionar el nombre del dominio kerberos en pRawValue. Si el esquema especificado es Digest, HTTP llama a AcceptSecurityContext para generar el desafío que se anexa al nombre del esquema. Los parámetros del esquema Basic (realm) y Digest (realm y domain name) se obtienen de la información de autenticación del grupo de configuración correspondiente.

Cuando la aplicación envía varios desafíos de autenticación al cliente en encabezados de solicitud desconocidos, la API del servidor HTTP los envía al cliente sin intervención. Sin embargo, no se recomienda este uso.