Compartir a través de


Autenticación de Passport en WinHTTP

Los servicios HTTP de Microsoft Windows (WinHTTP) admiten completamente el uso del lado cliente del protocolo de autenticación de Microsoft Passport. En este tema se proporciona información general sobre las transacciones implicadas en la autenticación de Passport y cómo controlarlas.

Nota:

En WinHTTP 5.1, la autenticación de Passport está deshabilitada de forma predeterminada.

 

Passport 1.4

Passport es un componente principal de los servicios de bloques de creación de Microsoft .NET. Permite a las empresas desarrollar y ofrecer servicios web distribuidos en una amplia gama de aplicaciones y permite a sus miembros usar un nombre de inicio de sesión y una contraseña en todos los sitios web participantes.

WinHTTP proporciona compatibilidad con la plataforma para Microsoft Passport 1.4 mediante la implementación del protocolo del lado cliente para la autenticación de Passport 1.4. Libera aplicaciones de los detalles de la interacción con la infraestructura de Passport y los nombres de usuario almacenados y contraseñas en Windows XP. Esta abstracción hace que el uso de Passport no sea diferente de la perspectiva de un desarrollador que el uso de esquemas de autenticación tradicionales como Basic o Digest.

Windows XP: La clave del Registro HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Passport\NumRegistrationRuns identifica el número de veces que se muestra el Asistente para autenticación de Passport cuando se requiere autenticación passPort. Si el valor de esta clave se establece en un número mayor que 5, no se muestra el asistente.

En las secciones siguientes se describen las transacciones implicadas en la autenticación de Passport desde el punto de vista de una aplicación cliente. Para el desarrollo de Passport del lado servidor, consulte información general sobre la documentación del SDK de Passport.

Solicitud inicial

Cuando un cliente solicita un recurso en un servidor que requiere la autenticación de Passport, el servidor comprueba la solicitud de presencia de vales. Si se envía un vale válido con la solicitud, el servidor responde con el recurso solicitado. Si el vale no existe en el cliente, el servidor responde con un código de estado 302. La respuesta incluye el encabezado de desafío "WWW-Authenticate: Passport1.4". Los clientes que no usan Passport pueden seguir el redireccionamiento al servidor de inicio de sesión de Passport. Los clientes más avanzados suelen ponerse en contacto con el nexo passport para determinar la ubicación del servidor de inicio de sesión de Passport.

Nota:

Central en la red de Microsoft Passport es passport Nexus, que facilita la sincronización de los sitios participantes de Passport para asegurar que cada sitio tiene los detalles más recientes sobre la configuración de red y otros problemas. Cada componente de Passport (Administrador de Passport, Servidores de inicio de sesión, Servidores de actualización, etc.) se comunica periódicamente con el Nexus para recuperar la información que necesita para localizar y comunicarse correctamente con los demás componentes de la red de Passport. Esta información se recupera como un documento XML denominado Documento de configuración de componentes o CCD.

 

En la imagen siguiente se muestra la solicitud inicial a un afiliado de Passport.

Imagen que muestra la solicitud inicial a un afiliado de passport.

Servidor de inicio de sesión de Passport

Un servidor de inicio de sesión de Passport controla todas las solicitudes de vales para cualquier recurso de una entidad de dominio de Passport. Para poder autenticar una solicitud mediante Passport, la aplicación cliente debe ponerse en contacto con el servidor de inicio de sesión para obtener los vales adecuados.

Cuando un cliente solicita vales desde un servidor de inicio de sesión de Passport, el servidor de inicio de sesión suele responder con un código de estado 401 para indicar que se deben proporcionar credenciales de usuario. Cuando se proporcionan estas credenciales, el servidor de inicio de sesión responde con los vales necesarios para acceder al recurso especificado en el servidor que contiene el recurso solicitado originalmente. El servidor de inicio de sesión también puede redirigir el cliente a otro servidor que pueda proporcionar el recurso solicitado.

Imagen que muestra una solicitud de vale de cliente a un servidor de inicio de sesión de Passport.

Solicitud autenticada

Cuando el cliente tiene los vales que corresponden a un servidor determinado, esos vales se incluyen con todas las solicitudes a ese servidor. Si los vales no se han modificado desde que se recuperaron del servidor de inicio de sesión de Passport y los vales son válidos para el servidor de recursos, el servidor de recursos envía una respuesta que incluye tanto el recurso solicitado como las cookies que indican que el usuario se autentica para futuras solicitudes.

Las cookies adicionales de la respuesta están pensadas para acelerar el proceso de autenticación. Las solicitudes adicionales de la misma sesión para los recursos de los servidores de la misma autoridad de dominio de Passport incluyen estas cookies adicionales. No es necesario enviar las credenciales al servidor de inicio de sesión de nuevo hasta que expiren las cookies.

Imagen que muestra una solicitud autenticada en el servidor de inicio de sesión de Passport.

Uso de Passport en WinHTTP

La autenticación de Passport en WinHTTP es muy similar a otros esquemas de autenticación. Consulte Autenticación en WinHTTP para obtener información general sobre la autenticación en WinHTTP.

En WinHTTP 5.1, la autenticación de Passport está deshabilitada de forma predeterminada y debe habilitarse explícitamente con WinHttpSetOption antes de su uso.

WinHTTP controla muchos de los detalles de transacción internamente para la autenticación de Passport. Durante la solicitud inicial, el servidor responde con un código de estado 302 cuando es necesario realizar la autenticación. El código de estado 302 indica realmente un redireccionamiento y forma parte del protocolo Passport para la compatibilidad con versiones anteriores. WinHTTP oculta el código de estado 302 y se pone en contacto con el nexo passport y, a continuación, el servidor de inicio de sesión. La aplicación WinHTTP recibe una notificación del código de estado 401 enviado por el servidor de inicio de sesión para solicitar credenciales de usuario. Sin embargo, en la aplicación aparece como si el estado 401 se origina en el servidor desde el que se solicitó el recurso. De este modo, la aplicación WinHTTP no es consciente de las interacciones con otros servidores y puede controlar la autenticación de Passport con el mismo código que controla otros esquemas de autenticación.

Normalmente, una aplicación WinHTTP responde a un código de estado 401 proporcionando credenciales de autenticación. Cuando se proporcionan credenciales con WinHttpSetCredentials o SetCredentials para la autenticación de passport, las credenciales se envían realmente al servidor de inicio de sesión, no al servidor indicado en la solicitud.

Sin embargo, al responder a un código de estado 407, una aplicación WinHTTP debe usar WinHttpSetOption para proporcionar credenciales de proxy, en lugar de WinHttpSetCredentials. Dado que WinHttpSetOption es una manera menos segura de proporcionar credenciales, normalmente debe evitarse.

Una vez recuperados, los vales se administran internamente y se envían automáticamente a los servidores aplicables en futuras solicitudes.

Nota

WinHTTP permite deshabilitar el redireccionamiento automático llamando a la función WinHttpSetOption para la marca de WINHTTP_OPTION_DISABLE_FEATURE y especificando un valor de WINHTTP_DISABLE_REDIRECTS. La deshabilitación del redireccionamiento no interfiere con el redireccionamiento que WinHTTP controla internamente para las transacciones de Passport.

 

WinHTTP puede completar correctamente la autenticación de Passport incluso si una aplicación deshabilita el redireccionamiento automático. Sin embargo, una vez completada la autenticación de Passport, se debe producir una redirección implícita desde la dirección URL del servidor de inicio de sesión de Passport a la dirección URL original. Esta redirección no se desencadena mediante una respuesta HTTP 302, pero está implícita en el protocolo Passport.

WinHTTP controla este redireccionamiento implícito especialmente. Si una aplicación ha deshabilitado el redireccionamiento automático, WinHTTP requiere que la aplicación conceda "permiso" a WinHTTP para redirigir automáticamente en este caso especial.

Para que WinHTTP vuelva a redirigir a la dirección URL original después de la autenticación, la aplicación debe registrar una función de devolución de llamada mediante WinHttpSetStatusCallback. WinHTTP puede notificar a la aplicación una devolución de llamada WINHTTP_CALLBACK_STATUS_REDIRECT, lo que permite a la aplicación cancelar el redireccionamiento. Una aplicación no necesita proporcionar ninguna funcionalidad en la función de devolución de llamada; el registro de la devolución de llamada es suficiente para permitir que WinHTTP siga este redireccionamiento de mayúsculas y minúsculas especiales.

El mensaje de ERROR_WINHTTP_LOGIN_FAILURE se genera si la aplicación no establece una función de devolución de llamada.

Passport Cobranding

A diferencia de los esquemas de autenticación tradicionales admitidos por WinHTTP, Passport se puede cobrar ampliamente. Al recibir un código de estado 401 que indica un desafío, una aplicación puede recuperar el gráfico y el texto de cobranding . Recupere una dirección URL para el gráfico de cobranding llamando a WinHttpQueryOption con la marca WINHTTP_OPTION_PASSPORT_COBRANDING_URL. Recupere el texto de cobranding llamando a WinHttpQueryOption con la marca WINHTTP_OPTION_PASSPORT_COBRANDING_TEXT. Estos elementos se pueden usar para personalizar un cuadro de diálogo de recopilación de credenciales.

Nombres de usuarios y contraseñas almacenados

Windows XP introdujo el concepto de nombres de usuario almacenados y contraseñas. Si las credenciales de Passport de un usuario se guardan a través del Asistente para registro de Passport o el cuadro de diálogo de credenciales estándar, se guarda en los nombres de usuario almacenados y las contraseñas. Cuando se usa WinHTTP en Windows XP o posterior, WinHTTP usa automáticamente las credenciales en los nombres de usuario almacenados y contraseñas si las credenciales no se establecen explícitamente. Esto es similar a la compatibilidad con las credenciales de inicio de sesión predeterminadas para NTLM/Kerberos. Sin embargo, el uso de credenciales de Passport predeterminadas no está sujeto a la configuración de la directiva de inicio de sesión automática.

Deshabilitación de la autenticación de Passport

Algunas aplicaciones pueden requerir la capacidad de deshabilitar la autenticación de Passport. Por ejemplo, cuando un afiliado de Passport responde con el código de estado 302 inicial, puede ser preferible seguir el redireccionamiento indicado y representar la página de autenticación html Passport en lugar de permitir que WinHTTP controle la autenticación internamente. La autenticación de Passport se deshabilita en WinHTTP llamando a la función WinHttpSetOption con la opción WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH y pasando el valor WINHTTP_DISABLE_PASSPORT_AUTH. Más adelante se puede volver a habilitar con WINHTTP_ENABLE_PASSPORT_AUTH.

No se puede deshabilitar la autenticación de Passport al usar el objeto WinHttpRequest .

Como se indicó anteriormente en esta sección, la autenticación de Passport está deshabilitada de forma predeterminada en WinHTTP 5.1 y debe estar habilitada explícitamente con WinHttpSetOption antes de su uso.

Invalidaciones de configuración de Passport usadas para pruebas

WinHTTP se basa en la información de configuración que descarga desde el servidor nexus de Passport para admitir la autenticación de Passport 1.4. De forma predeterminada, este servidor seguro (SSL) es nexus.passport.com y el recurso de configuración es rdr/pprdr.asp, que se conoce como la configuración del pasaporte "activo". El formato de la información es un encabezado HTTP personalizado "PassportURLs", seguido de pares de valores de atributo delimitados por comas.

Por ejemplo, "https://nexus.passport.com/rdr/pprdr.asp" devuelve la siguiente información de configuración:

PassportURLs: DARealm=Passport.net,
DALogin=login.passport.com/login2.asp,
DAReg=https://register.passport.com/defaultwiz.asp,
Properties=https://memberservices.passport.com/ppsecure/MSRV_EditProfile.asp,
Privacy=https://www.passport.com/consumer/privacypolicy.asp,
GeneralRedir=https://nexusrdr.passport.com/redir.asp,
Help=https://memberservices.passport.com/UI/MSRV_UI_Help.asp,
ConfigVersion=2
\r\n

Los elementos relevantes para WinHTTP son DARealm, DALogin y ConfigVersion. Por motivos de rendimiento, se almacenan en caché durante la vigencia de una sesión winHTTP. Estos tres valores se pueden invalidar mediante las aplicaciones necesarias para trabajar con otra infraestructura de Passport distinta de la configuración de producción "activa" cambiando la configuración del Registro adecuada en .

HKEY_LOCAL_MACHINE
   SOFTWARE
      Microsoft
         Windows
            CurrentVersion
               Internet Settings
                  WinHttp
                     Passport Test
LoginServerRealm (REG_SZ)    For example: abc.net
LoginServerUrl (REG_SZ)      For example: https://private-login.passport.com/login2.asp
ConfigVersion (REG_DWORD)    For example: 10

Si LoginServerUrl está presente en el registro, WinHTTP no se comunica con el servidor nexus para otros valores de configuración. En este caso, LoginServerRealm y ConfigVersion también deben establecerse a través del Registro para corregir los valores.

Una aplicación puede, con fines de prueba, ser necesaria para descargar la configuración de passport desde un servidor nexus privado. Para ello, se pueden invalidar dos valores del Registro en

HKEY_LOCAL_MACHINE
   SOFTWARE
      Microsoft
         Windows
            CurrentVersion
               Internet Settings
                  WinHttp
                     Passport Test
NexusHost (REG_SZ)    e.g. private-nexus.passport.com
NexusObj(REG_SZ)      e.g. config/passport.asp

Autenticación en WinHTTP