Función InitializeSecurityContextW (sspi.h)
La función
Normalmente, la función InitializeSecurityContext (General) se llama en un bucle hasta que se establece un contexto de seguridad suficiente.
Para obtener información sobre cómo usar esta función con un proveedor de soporte técnico de seguridad de específico (SSP), consulte los temas siguientes.
Tema | Descripción |
---|---|
InitializeSecurityContext (CredSSP) | Inicia el contexto de seguridad saliente del lado cliente desde un identificador de credencial mediante el proveedor de soporte técnico de seguridad de credenciales (CredSSP). |
InitializeSecurityContext (Digest) | Inicia el contexto de seguridad saliente del lado cliente desde un identificador de credenciales mediante el paquete de seguridad implícita. |
InitializeSecurityContext (Kerberos) | Inicia el contexto de seguridad saliente del lado cliente desde un identificador de credencial mediante el paquete de seguridad Kerberos. |
initializeSecurityContext (Negotiate) | Inicia el contexto de seguridad saliente del lado cliente desde un identificador de credencial mediante el paquete de seguridad Negotiate. |
InitializeSecurityContext (NTLM) | Inicia el contexto de seguridad saliente del lado cliente desde un identificador de credenciales mediante el paquete de seguridad NTLM. |
InitializeSecurityContext (Schannel) | Inicia el contexto de seguridad saliente del lado cliente desde un identificador de credenciales mediante el paquete de seguridad Schannel. |
Sintaxis
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY InitializeSecurityContextW(
[in, optional] PCredHandle phCredential,
[in, optional] PCtxtHandle phContext,
[in, optional] PSECURITY_STRING pTargetName,
[in] unsigned long fContextReq,
[in] unsigned long Reserved1,
[in] unsigned long TargetDataRep,
[in, optional] PSecBufferDesc pInput,
[in] unsigned long Reserved2,
[in, out, optional] PCtxtHandle phNewContext,
[in, out, optional] PSecBufferDesc pOutput,
[out] unsigned long *pfContextAttr,
[out, optional] PTimeStamp ptsExpiry
);
Parámetros
[in, optional] phCredential
Identificador de las credenciales de devueltas por AcquireCredentialsHandle (General). Este identificador se usa para compilar el contexto de seguridad de . La función
[in, optional] phContext
Puntero a una estructura CtxtHandle. En la primera llamada a InitializeSecurityContext (General), este puntero es NULL. En la segunda llamada, este parámetro es un puntero al identificador del contexto parcialmente formado devuelto en el parámetro phNewContext por la primera llamada.
Este parámetro es opcional con el SSP de resumen de Microsoft y se puede establecer en NULL.
Al usar el SSP de Schannel, en la primera llamada a InitializeSecurityContext (General), especifique NULL. En futuras llamadas, especifique el token recibido en el parámetro phNewContext después de la primera llamada a esta función.
[in, optional] pTargetName
Puntero a una cadena terminada en null que indica el destino del contexto. El contenido de la cadena se paquete de seguridad específico, como se describe en la tabla siguiente. Esta lista no es exhaustiva. Se pueden agregar SSP adicionales del sistema y SSP de terceros a un sistema.
SSP en uso | Significado |
---|---|
|
Cadena terminada en NULL que identifica de forma única el URI del recurso solicitado. La cadena debe estar compuesta de caracteres permitidos en un URI y que el conjunto de código ASCII us debe representar. La codificación porcentual se puede usar para representar caracteres fuera del conjunto de código ASCII de EE. UU. |
|
nombre de entidad de seguridad de servicio (SPN) o el contexto de seguridad de del servidor de destino. |
|
nombre de entidad de seguridad de servicio (SPN) o el contexto de seguridad de del servidor de destino. |
|
Cadena terminada en NULL que identifica de forma única el servidor de destino. Schannel usa este valor para comprobar el certificado de servidor. Schannel también usa este valor para buscar la sesión en la memoria caché de sesiones al restablecer una conexión. La sesión almacenada en caché solo se usa si se cumplen todas las condiciones siguientes:
|
[in] fContextReq
Marcas de bits que indican solicitudes para el contexto. No todos los paquetes pueden admitir todos los requisitos. Las marcas usadas para este parámetro tienen como prefijo ISC_REQ_, por ejemplo, ISC_REQ_DELEGATE. Este parámetro puede ser una o varias de las marcas de atributos siguientes.
Valor | Significado |
---|---|
|
El paquete de seguridad asigna búferes de salida. Cuando haya terminado de usar los búferes de salida, puede liberarlos llamando a la función freeContextBuffer |
|
Cifre los mensajes mediante la función |
|
El contexto de seguridad no controlará los mensajes de formato. Este valor es el valor predeterminado para los paquetes de seguridad Kerberos, Negotiate y NTLM. |
|
El servidor puede usar el contexto para autenticarse en otros servidores como cliente. La marca ISC_REQ_MUTUAL_AUTH debe establecerse para que esta marca funcione. Válido para Kerberos. Ignore esta marca para delegación restringida. |
|
Cuando se produzcan errores, se notificará a la entidad remota. |
|
Use Digest para HTTP. Omita esta marca para usar Digest como mecanismo SASL. |
|
Firme los mensajes y compruebe las firmas mediante las funciones |
|
Schannel no debe autenticar automáticamente el servidor. |
|
Se cumplirá la directiva de autenticación mutua del servicio.
Precaución Esto no significa necesariamente que se realice la autenticación mutua, solo que se cumpla la directiva de autenticación del servicio. Para asegurarse de que se realiza la autenticación mutua, llame a la función
|
|
Si se establece esta marca, se omite la marca ISC_REQ_INTEGRITY.
Este valor solo es compatible con los paquetes de seguridad Negotiate y Kerberos . |
|
Detecte mensajes reproducidos que se han codificado mediante las funciones de EncryptMessage o MakeSignature. |
|
Detectar mensajes recibidos fuera de secuencia. |
|
Compatibilidad con una conexión orientada a flujos. |
|
Se debe negociar una nueva clave de sesión .
Este valor solo es compatible con el paquete de seguridad kerberos . |
|
Schannel no debe intentar proporcionar credenciales para el cliente automáticamente. |
Es posible que el cliente no admita los atributos solicitados. Para obtener más información, consulte el parámetro pfContextAttr.
Para obtener más descripciones de los distintos atributos, vea Context Requirements.
[in] Reserved1
Este parámetro está reservado y debe establecerse en cero.
[in] TargetDataRep
Representación de datos, como la ordenación de bytes, en el destino. Este parámetro puede ser SECURITY_NATIVE_DREP o SECURITY_NETWORK_DREP.
Este parámetro no se usa con Digest o Schannel. Establézcalo en cero.
[in, optional] pInput
Puntero a una estructura secBufferDesc de
[in] Reserved2
Este parámetro está reservado y debe establecerse en cero.
[in, out, optional] phNewContext
Puntero a una estructura CtxtHandle. En la primera llamada a InitializeSecurityContext (General), este puntero recibe el nuevo identificador de contexto. En la segunda llamada,
Al usar el SSP de Schannel, en las llamadas después de la primera llamada, pase el identificador devuelto aquí como el parámetro phContext y especifique NULL para phNewContext.
[in, out, optional] pOutput
Puntero a una estructura secBufferDesc
Cuando se usa el SSP de resumen de Microsoft, este parámetro recibe la respuesta de desafío que se debe enviar al servidor.
Al usar el SSP de Schannel, si se especifica la marca ISC_REQ_ALLOCATE_MEMORY, el SSP de Schannel asignará memoria para el búfer y colocará la información adecuada en el SecBufferDesc. Además, el autor de la llamada debe pasar un búfer de tipo SECBUFFER_ALERT. En la salida, si se genera una alerta, este búfer contiene información sobre esa alerta y se produce un error en la función.
[out] pfContextAttr
Puntero a una variable para recibir un conjunto de marcas de bits que indican los atributos del contexto de establecido. Para obtener una descripción de los distintos atributos, vea Context Requirements.
Las marcas usadas para este parámetro tienen el prefijo ISC_RET, como ISC_RET_DELEGATE.
Para obtener una lista de valores válidos, consulte el parámetro fContextReq.
No compruebe si hay atributos relacionados con la seguridad hasta que la llamada de función final se devuelva correctamente. Las marcas de atributo que no están relacionadas con la seguridad, como la marca de ASC_RET_ALLOCATED_MEMORY, se pueden comprobar antes de la devolución final.
[out, optional] ptsExpiry
Puntero a una estructura TimeStamp que recibe la hora de expiración del contexto. Se recomienda que el paquete de seguridad devolver siempre este valor en la hora local. Este parámetro es opcional y NULL deben pasarse para clientes de corta duración.
No hay ningún tiempo de expiración para los contextos de seguridad de SSP de Microsoft Digest o las credenciales de .
Valor devuelto
Si la función se ejecuta correctamente, la función devuelve uno de los siguientes códigos de éxito.
Código devuelto | Descripción |
---|---|
|
El cliente debe llamar a CompleteAuthToken y, a continuación, pasar la salida al servidor. A continuación, el cliente espera un token devuelto y lo pasa, en otra llamada, a InitializeSecurityContext (General). |
|
El cliente debe terminar de compilar el mensaje y, a continuación, llamar a la función CompleteAuthToken. |
|
El cliente debe enviar el token de salida al servidor y esperar un token de retorno. A continuación, el token devuelto se pasa en otra llamada a InitializeSecurityContext (General). El token de salida puede estar vacío. |
|
Use con Schannel. El servidor ha solicitado la autenticación de cliente y las credenciales proporcionadas no incluyen un certificado o el certificado no lo emitió una entidad de certificación de confianza del servidor. Para obtener más información, vea Comentarios. |
|
Use con Schannel. Los datos de todo el mensaje no se leyeron desde la conexión.
Cuando se devuelve este valor, el búfer de de |
|
El contexto de seguridad se inicializó correctamente. No es necesario realizar otra llamada InitializeSecurityContext (General). Si la función devuelve un token de salida, es decir, si el SECBUFFER_TOKEN de pOutput es de longitud distinta de cero, ese token debe enviarse al servidor. |
Si se produce un error en la función, la función devuelve uno de los siguientes códigos de error.
Observaciones
El autor de la llamada es responsable de determinar si los atributos de contexto finales son suficientes. Si, por ejemplo, se solicitó la confidencialidad, pero no se pudo establecer, algunas aplicaciones pueden optar por apagar la conexión inmediatamente.
Si los atributos del contexto de seguridad no son suficientes, el cliente debe liberar el contexto parcialmente creado llamando a la función DeleteSecurityContext.
Un cliente usa la función initializeSecurityContext (General)
Para un contexto de seguridad de dos fases, la secuencia de llamada es la siguiente:
- El cliente llama a la función con phContext establecido en NULL y rellena el descriptor de búfer con el mensaje de entrada.
- El paquete de seguridad examina los parámetros y construye un token opaco, colocándolo en el elemento TOKEN de la matriz de búfer. Si el parámetro fContextReq incluye la marca ISC_REQ_ALLOCATE_MEMORY, el paquete de seguridad asigna la memoria y devuelve el puntero en el elemento TOKEN.
- El cliente envía el token devuelto en el búfer de pOutput al servidor de destino. A continuación, el servidor pasa el token como argumento de entrada en una llamada a la función acceptSecurityContext (General)
. - AcceptSecurityContext (General) puede devolver un token, que el servidor envía al cliente para una segunda llamada a InitializeSecurityContext (General) si la primera llamada devolvió SEC_I_CONTINUE_NEEDED.
- El cliente llama a la función como se ha descrito anteriormente, pero el paquete devuelve el código de SEC_I_CONTINUE_NEEDED correcto.
- El cliente envía el token de salida al servidor y espera la respuesta del servidor.
- Tras la recepción de la respuesta del servidor, el cliente llama a InitializeSecurityContext (General) de nuevo, con phContext establecido en el identificador que se devolvió desde la última llamada. El token recibido del servidor se proporciona en el parámetro de
pInput.
Si la función devuelve una de las respuestas de error, no se acepta la respuesta del servidor y no se establece la sesión.
Si la función devuelve SEC_I_CONTINUE_NEEDED, SEC_I_COMPLETE_NEEDED o SEC_I_COMPLETE_AND_CONTINUE, se repiten los pasos 2 y 3.
Para inicializar un contexto de seguridad , se puede requerir más de una llamada a esta función, según el mecanismo de autenticación subyacente, así como las opciones especificadas en el parámetro fContextReq.
Los parámetros fContextReq y pfContextAttributes son máscaras de bits que representan varios atributos de contexto. Para obtener una descripción de los distintos atributos, vea Context Requirements. El parámetro pfContextAttributes es válido en cualquier devolución correcta, pero solo en la devolución correcta final debe examinar las marcas que pertenecen a aspectos de seguridad del contexto. Las devoluciones intermedias pueden establecer, por ejemplo, la marca ISC_RET_ALLOCATED_MEMORY.
Si se establece la marca de ISC_REQ_USE_SUPPLIED_CREDS, el paquete de seguridad debe buscar un tipo de búfer de SECBUFFER_PKG_PARAMS en el búfer de entrada de pInput. Esta no es una solución genérica, pero permite un emparejamiento seguro de la aplicación y el paquete de seguridad cuando corresponda.
Si se especificó ISC_REQ_ALLOCATE_MEMORY, el autor de la llamada debe liberar la memoria llamando a la función
Por ejemplo, el token de entrada podría ser el desafío de un administrador de LAN. En este caso, el token de salida sería la respuesta cifrada con NTLM al desafío.
La acción que realiza el cliente depende del código devuelto de esta función. Si el código devuelto es SEC_E_OK, no habrá ninguna segunda llamada InitializeSecurityContext (General) y no se espera ninguna respuesta del servidor. Si el código devuelto es SEC_I_CONTINUE_NEEDED, el cliente espera un token en respuesta del servidor y lo pasa en una segunda llamada a InitializeSecurityContext (General). El código devuelto SEC_I_COMPLETE_NEEDED indica que el cliente debe terminar de compilar el mensaje y llamar a la función CompleteAuthToken. El código SEC_I_COMPLETE_AND_CONTINUE incorpora ambas acciones.
Si InitializeSecurityContext (General) devuelve éxito en la primera llamada (o solo), el autor de la llamada debe llamar finalmente a la función DeleteSecurityContext en el identificador devuelto, incluso si se produce un error en la llamada en una etapa posterior del intercambio de autenticación.
El cliente puede llamar a InitializeSecurityContext (General) una vez que se haya completado correctamente. Esto indica al paquete de seguridad que se quiere una reautenticación.
Los autores de llamadas en modo kernel tienen las siguientes diferencias: el nombre de destino es una cadena Unicode que se debe asignar en memoria virtual mediante VirtualAlloc; no se debe asignar desde el grupo. Los búferes pasados y proporcionados en pInput y pOutput deben estar en memoria virtual, no en el grupo.
Al usar el SSP de Schannel, si la función devuelve SEC_I_INCOMPLETE_CREDENTIALS, compruebe que especificó un certificado válido y de confianza en sus credenciales. El certificado se especifica al llamar a la función AcquireCredentialsHandle (General). El certificado debe ser un certificado de autenticación de cliente emitido por una entidad de certificación de (CA) de confianza del servidor. Para obtener una lista de las CA de confianza del servidor, llame a la función QueryContextAttributes (General) y especifique el atributo SECPKG_ATTR_ISSUER_LIST_EX.
Cuando se usa el SSP de Schannel, después de que una aplicación cliente reciba un certificado de autenticación de una ENTIDAD de certificación de confianza para el servidor, la aplicación crea una nueva credencial llamando a la función
Nota
El encabezado sspi.h define InitializeSecurityContext como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Conventions for Function Prototypes.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows XP [solo aplicaciones de escritorio] |
servidor mínimo admitido | Windows Server 2003 [solo aplicaciones de escritorio] |
de la plataforma de destino de |
Windows |
encabezado de |
sspi.h (include Security.h) |
biblioteca de |
Secur32.lib |
DLL de |
Secur32.dll |
Consulte también
AcceptSecurityContext (General)
AcquireCredentialsHandle (General)
funciones SSPI de