Función AcceptSecurityContext (sspi.h)
La función AcceptSecurityContext (CredSSP) permite al componente de servidor de una aplicación de transporte establecer un contexto de seguridad entre el servidor y un cliente remoto. El cliente remoto llama a la función InitializeSecurityContext (CredSSP) para iniciar el proceso de establecimiento de un contexto de seguridad. El servidor puede requerir uno o varios tokens de respuesta del cliente remoto para completar el establecimiento del contexto de seguridad.
Sintaxis
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY AcceptSecurityContext(
[in, optional] PCredHandle phCredential,
[in, optional] PCtxtHandle phContext,
[in, optional] PSecBufferDesc pInput,
[in] unsigned long fContextReq,
[in] unsigned long TargetDataRep,
[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 del servidor. Para recuperar este identificador, el servidor llama a la función AcquireCredentialsHandle (CredSSP) con la marca SECPKG_CRED_INBOUND o SECPKG_CRED_BOTH establecida.
[in, optional] phContext
Puntero a una estructura CtxtHandle . En la primera llamada a AcceptSecurityContext (CredSSP), este puntero es NULL. En las llamadas posteriores, phContext especifica el contexto parcialmente formado devuelto en el parámetro phNewContext por la primera llamada.
[in, optional] pInput
Puntero a una estructura SecBufferDesc generada por una llamada de cliente a InitializeSecurityContext (CredSSP) . La estructura contiene el descriptor de búfer de entrada.
El primer búfer debe ser de tipo SECBUFFER_TOKEN y contener el token de seguridad recibido del cliente. El segundo búfer debe ser de tipo SECBUFFER_EMPTY.
[in] fContextReq
Marcas de bits que especifican los atributos requeridos por el servidor para establecer el contexto. Las marcas de bits se pueden combinar mediante operaciones OR bit a bit. Este parámetro puede ser uno o más de los siguientes valores.
Valor | Significado |
---|---|
|
El proveedor de soporte técnico de seguridad de credenciales (CredSSP) asignará búferes de salida. Cuando haya terminado de usar los búferes de salida, liberelos llamando a la función FreeContextBuffer . |
|
El contexto de seguridad no controlará los mensajes de formato. |
|
El servidor puede suplantar al cliente. Omita esta marca para la delegación restringida. |
|
Cuando se produzcan errores, se notificará a la entidad remota. |
|
Detecte paquetes reproducidos. |
|
Detectar mensajes recibidos fuera de secuencia. |
|
Compatibilidad con una conexión orientada a flujos. |
Para conocer las marcas de atributo posibles y sus significados, consulte Requisitos de contexto. Las marcas usadas para este parámetro tienen el prefijo ASC_REQ, por ejemplo, ASC_REQ_DELEGATE.
Es posible que el cliente no admita los atributos solicitados. Para obtener más información, consulte el parámetro pfContextAttr .
[in] TargetDataRep
Representación de datos, como el orden de bytes, en el destino. Este parámetro puede ser SECURITY_NATIVE_DREP o SECURITY_NETWORK_DREP.
[in, out, optional] phNewContext
Puntero a una estructura CtxtHandle . En la primera llamada a AcceptSecurityContext (CredSSP), este puntero recibe el nuevo identificador de contexto. En las llamadas posteriores, phNewContext puede ser el mismo que el identificador especificado en el parámetro phContext .
[in, out, optional] pOutput
Puntero a una estructura SecBufferDesc que contiene el descriptor del búfer de salida. Este búfer se envía al cliente para la entrada en llamadas adicionales a InitializeSecurityContext (CredSSP). Se puede generar un búfer de salida incluso si la función devuelve SEC_E_OK. Cualquier búfer generado se debe devolver a la aplicación cliente.
En la salida, este búfer recibe un token para el contexto de seguridad. El token debe enviarse al cliente. La función también puede devolver un búfer de tipo SECBUFFER_EXTRA.
[out] pfContextAttr
Puntero a un conjunto de marcas de bits que indican los atributos del contexto establecido. Para obtener una descripción de los distintos atributos, vea Requisitos de contexto. Las marcas usadas para este parámetro tienen el prefijo ASC_RET, por ejemplo, ASC_RET_DELEGATE.
No compruebe los atributos relacionados con la seguridad hasta que la llamada de función final se devuelva correctamente. Las marcas de atributo no 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 devuelva siempre este valor en la hora local.
Valor devuelto
Esta función devuelve uno de los valores siguientes.
Código o valor devuelto | Descripción |
---|---|
|
La función se ha realizado correctamente. Los datos del búfer de entrada están incompletos. La aplicación debe leer datos adicionales del cliente y volver a llamar a AcceptSecurityContext (CredSSP). |
|
Error en la función. No hay suficiente memoria disponible para completar la acción solicitada. |
|
Error en la función. Error que no se asignación a un código de error de SSPI. |
|
Error en la función. El identificador pasado a la función no es válido. |
|
Error en la función. El token pasado a la función no es válido. |
|
Error en el inicio de sesión. |
|
Error en la función. No se pudo establecer contacto con ninguna autoridad para la autenticación. Esto puede deberse a las siguientes condiciones:
|
|
Error en la función. El identificador de credenciales especificado en el parámetro phCredential no es válido. |
|
La función se ha realizado correctamente. Se aceptó el contexto de seguridad recibido del cliente. Si la función generó un token de salida, el token debe enviarse al proceso de cliente. |
|
Error en la función. El parámetro fContextReq especificó una marca de atributo de contexto (ASC_REQ_DELEGATE o ASC_REQ_PROMPT_FOR_CREDS) que no era válida. |
|
La función se ha realizado correctamente. El servidor debe llamar a CompleteAuthToken y pasar el token de salida al cliente. A continuación, el servidor debe esperar un token de retorno del cliente antes de realizar otra llamada a AcceptSecurityContext (CredSSP). |
|
La función se ha realizado correctamente. El servidor debe terminar de compilar el mensaje desde el cliente antes de llamar a CompleteAuthToken. |
|
La función se ha realizado correctamente. El servidor debe enviar el token de salida al cliente y esperar un token devuelto. El token devuelto debe pasarse en pInput para otra llamada a AcceptSecurityContext (CredSSP). |
Comentarios
La función AcceptSecurityContext (CredSSP) es el homólogo del servidor de la función InitializeSecurityContext (CredSSP).
Cuando el servidor recibe una solicitud de un cliente, usa el parámetro fContextReq para especificar lo que requiere de la sesión. De esta manera, un servidor puede requerir que los clientes puedan usar una sesión confidencial o de comprobación de integridad; puede rechazar clientes que no puedan satisfacer esa demanda. Como alternativa, un servidor no puede requerir nada; Lo que el cliente requiera o pueda proporcionar se devuelve en el parámetro pfContextAttr .
Los parámetros fContextReq y pfContextAttr son máscaras de bits que representan varios atributos de contexto. Para obtener una descripción de los distintos atributos, vea Requisitos de contexto.
Una vez establecido el contexto de seguridad, la aplicación de servidor puede usar la función QuerySecurityContextToken para recuperar un identificador de la cuenta de usuario a la que se asignó el certificado de cliente. Además, el servidor puede usar la función ImpersonateSecurityContext para suplantar al usuario.
Requisitos
Cliente mínimo compatible | Windows Vista [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2008 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | sspi.h (include Security.h) |
Library | Secur32.lib |
Archivo DLL | Secur32.dll |