Función AcceptSecurityContext (CredSSP)
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
SECURITY_STATUS SEC_ENTRY AcceptSecurityContext(
_In_opt_ PCredHandle phCredential,
_In_opt_ PCtxtHandle phContext,
_In_opt_ PSecBufferDesc pInput,
_In_ unsigned long fContextReq,
_In_ unsigned long TargetDataRep,
_Inout_opt_ PCtxtHandle phNewContext,
_Inout_opt_ PSecBufferDesc pOutput,
_Out_ unsigned long *pfContextAttr,
_Out_opt_ PTimeStamp ptsExpiry
);
Parámetros
phCredential [in, optional]
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.
phContext [in, optional]
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.
Advertencia
No use el mismo identificador de contexto en llamadas simultáneas a AcceptSecurityContext (CredSSP). La implementación de API en los proveedores de servicios de seguridad no es segura para subprocesos.
pInput [in, optional]
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.
fContextReq [in]
- Marcas de bits que especifican los atributos requeridos por el servidor para establecer el contexto. Las marcas de bits se pueden combinar usando operaciones OR bit a bit. Este parámetro puede ser uno o más de los siguientes valores.
Value | Significado |
---|---|
ASC_REQ_ALLOCATE_MEMORY | El proveedor de compatibilidad para seguridad de credenciales (CredSSP) asignará búferes de salida. Cuando haya terminado de usar los búferes de salida, puede liberarlos llamando a la función FreeContextBuffer. |
ASC_REQ_CONNECTION | El contexto de seguridad no controlará el formato de los mensajes. |
ASC_REQ_DELEGATE | El servidor está autorizado a suplantar al cliente. Omita esta marca para la delegación restringida. |
ASC_REQ_EXTENDED_ERROR | Cuando se produzcan errores, se notificará a la entidad remota. |
ASC_REQ_REPLAY_DETECT | Detecta paquetes reproducidos. |
ASC_REQ_SEQUENCE_DETECT | Detectar los mensajes recibidos fuera de la secuencia. |
ASC_REQ_STREAM | Compatibilidad con una conexión orientada a flujos. |
Para ver las posibles marcas de atributos y sus significados, consulte Requisitos de contexto. Las marcas usadas para este parámetro tienen como prefijo ASC_REQ, por ejemplo, ASC_REQ_DELEGATE.
Es posible que el cliente no admita los atributos solicitados. Para más información, consulte el parámetro pfContextAttr.
TargetDataRep [in]
Representación de datos, como orden de bytes, en el destino. Este parámetro puede ser SECURITY_NATIVE_DREP o SECURITY_NETWORK_DREP.
phNewContext [in, out, optional]
Puntero a una estructura CtxtHandle. En la primera llamada a AcceptSecurityContext (CredSSP), este puntero recibe el nuevo identificador de contexto. En llamadas posteriores, phNewContext puede coincidir con el identificador especificado en el parámetro phContext.
pOutput [in, out, optional]
Puntero a una estructura SecBufferDesc que contiene el descriptor de 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 se debe enviar al cliente. La función también puede devolver un búfer de tipo SECBUFFER_EXTRA.
pfContextAttr [out]
Puntero a un conjunto de marcas de bits que indican los atributos del contexto establecido. Para ver descripciones adicionales de los distintos atributos, consulte Requisitos de contexto. Las marcas usadas para este parámetro tienen como prefijo ASC_RET, por ejemplo, ASC_RET_DELEGATE.
No compruebe si hay 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 ASC_RET_ALLOCATED_MEMORY, se pueden comprobar antes de la devolución final.
ptsExpiry [out, optional]
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 hora local.
Nota:
Hasta la última llamada del proceso de autenticación, la hora de caducidad del contexto puede ser incorrecta, ya que se proporcionará más información durante las fases posteriores de la negociación. Por lo tanto, ptsTimeStamp debe ser NULL
hasta la última llamada a la función.
Valor devuelto
Esta función devuelve uno de los siguientes valores.
Código/valor de retorno | Descripción |
---|---|
SEC_E_INCOMPLETE_MESSAGE 0x80090318L |
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 llamar de nuevo a AcceptSecurityContext (CredSSP). |
SEC_E_INSUFFICIENT_MEMORY 0x80090300L |
Se produjo un error en la función. No hay suficiente memoria disponible para realizar la acción solicitada. |
SEC_E_INTERNAL_ERROR 0x80090304L |
Se produjo un error en la función. Se produjo un error al que no se le ha asignado un código de error SSPI. |
SEC_E_INVALID_HANDLE 0x80100003L |
Se produjo un error en la función. La controlador pasado a la función no es válido. |
SEC_E_INVALID_TOKEN 0x80090308L |
Se produjo un error en la función. El token transferido a la función no es válido. |
SEC_E_LOGON_DENIED 0x8009030CL |
Error de inicio de sesión. |
SEC_E_NO_AUTHENTICATING_AUTHORITY 0x80090311L |
Se produjo un error en la función. No se pudo establecer contacto con ninguna autoridad para la autenticación. Esto puede deberse a los siguientes motivos:
|
SEC_E_NO_CREDENTIALS 0x8009030EL |
Se produjo un error en la función. El identificador de credenciales especificado en el parámetro phCredential no es válido. |
SEC_E_OK 0x00000000L |
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, se debe enviar al proceso de cliente. |
SEC_E_UNSUPPORTED_FUNCTION 0x80090302L |
Se produjo un 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. |
SEC_I_COMPLETE_AND_CONTINUE 0x00090314L |
La función se ha realizado correctamente. El servidor debe llamar a CompleteAuthToken y transferir 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). |
SEC_I_COMPLETE_NEEDED 0x00090313L |
La función se ha realizado correctamente. El servidor debe terminar de compilar el mensaje desde el cliente antes de llamar a CompleteAuthToken. |
SEC_I_CONTINUE_NEEDED 0x00090312L |
La función se ha realizado correctamente. El servidor debe enviar el token de salida al cliente y esperar a que se devuelva un token. El token devuelto se debe transferir en pInput para otra llamada a AcceptSecurityContext (CredSSP). |
Comentarios
La función AcceptSecurityContext (CredSSP) es el equivalente 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 este modo, un servidor puede requerir que los clientes sean capaces de usar una sesión confidencial o con comprobación de integridad, y puede rechazar los clientes que no puedan satisfacer esa exigencia. Como alternativa, un servidor puede no requerir nada, y 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 ver descripciones adicionales de los distintos atributos, consulte Requisitos de contexto.
Nota:
Aunque el parámetro pfContextAttr es válido en cualquier devolución correcta, pero las marcas relacionadas con los aspectos de seguridad del contexto solo se deben examinar en la devolución correcta final. Las devoluciones intermedias pueden establecer, por ejemplo, la marca ISC_RET_ALLOCATED_MEMORY.
El autor de la llamada es responsable de determinar si los atributos de contexto finales son suficientes. Si, por ejemplo, se solicitó la confidencialidad (cifrado), pero no se pudo establecer, algunas aplicaciones pueden optar por cerrar la conexión inmediatamente. Si no se puede establecer el contexto de seguridad, el servidor debe liberar el contexto creado parcialmente llamando a la función DeleteSecurityContext. Para obtener información sobre cuándo llamar a la función DeleteSecurityContext, consulte DeleteSecurityContext.
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
Requisito | Valor |
---|---|
Cliente mínimo compatible | Windows�Vista [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server�2008 [solo aplicaciones de escritorio] |
Encabezado | Sspi.h (incluye Security.h) |
Biblioteca | Secur32.lib |
Archivo DLL | Secur32.dll |