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 HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Passport\NumRegistrationRuns clave del Registro 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 en el lado servidor, consulte La información general sobre la documentación del SDK de Passport.
- de solicitud inicial
- del servidor de inicio de sesión de Passport
- de solicitud autenticada
Solicitud inicial
Cuando un cliente solicita un recurso en un servidor que requiere autenticación de Passport, el servidor comprueba la solicitud de presencia de vales de . Si se envía un vale de válido con la solicitud, el servidor responde con el recurso solicitado. Si el vale de 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 para la red de Microsoft Passport es passport Nexus, que facilita la sincronización de los sitios participantes de Passport para asegurarse de que cada sitio tiene los detalles más recientes sobre la configuración de red y otros problemas. Cada componente de Passport (Passport Manager, 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.
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 de adecuados.
Cuando un cliente solicita vales desde un servidor de inicio de sesión de Passport, el servidor de inicio de sesión normalmente responde 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 de 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.
Solicitud autenticada
Cuando el cliente tiene los vales de que corresponden a un servidor determinado, esos vales se incluyen con todas las solicitudes a ese servidor. Si los vales de no se han modificado desde que se recuperaron del servidor de inicio de sesión de Passport y los vales de 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 entidad de dominio de Passport incluyen estas cookies adicionales. Las credenciales no necesitan enviarse de nuevo al servidor de inicio de sesión hasta que expiren las cookies.
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 la 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 una redirección 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 passport nexus 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 recuperado, vales se administran internamente y se envían automáticamente a los servidores aplicables en solicitudes futuras.
Nota
WinHTTP permite deshabilitar el redireccionamiento automático llamando a la funcióndeWinHttpSetOption para la marca de WINHTTP_OPTION_DISABLE_FEATURE y especificando un valor de WINHTTP_DISABLE_REDIRECTS. Deshabilitar el redireccionamiento no interfiere con el redireccionamiento que WinHTTP controla internamente para las transacciones de Passport.
WinHTTP puede completar correctamente la autenticación de Passport aunque una aplicación deshabilite la redirección automática. Sin embargo, una vez completada la autenticación de Passport, debe producirse 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 redirigirse 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. A continuación, WinHTTP puede notificar a la aplicación una devolución de llamada WINHTTP_CALLBACK_STATUS_REDIRECT, lo que permite a la aplicación cancelar la redirección. 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 esta redirección especial de casos.
El mensaje 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 puede ser ampliamente cobraded. Al recibir un código de estado 401 que indica un desafío, una aplicación puede recuperar el cobranding gráfico y texto. Recupere una dirección URL para el gráfico de 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 usuario almacenados y contraseñas
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 de o el cuadro de diálogo de credenciales de 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 las contraseñas si no se establecen explícitamente las credenciales. Esto es similar a la compatibilidad de 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 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 de HTML Passport en lugar de permitir que WinHTTP controle la autenticación internamente. La autenticación de Passport está deshabilitada en WinHTTP llamando a la funciónWinHttpSetOption 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 objetoWinHttpRequest.
Como se indicó anteriormente en esta sección, la autenticación de Passport está deshabilitada de forma predeterminada en WinHTTP 5.1 y debe habilitarse 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 del servidor nexus 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 atributo-valor 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
Las partes que son 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 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. Esto se puede hacer invalidando 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
Temas relacionados
-
autenticación de en WinHTTP