Función AcceptSecurityContext (Digest)
La función AcceptSecurityContext (Digest) 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 usa la función InitializeSecurityContext (Digest) 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,
_Inout_opt_ PCtxtHandle phContext,
_In_opt_ PSecBufferDesc pInput,
_In_ ULONG fContextReq,
_In_ ULONG TargetDataRep,
_Inout_opt_ PCtxtHandle phNewContext,
_Inout_opt_ PSecBufferDesc pOutput,
_Out_ PULONG pfContextAttr,
_Out_opt_ PTimeStamp ptsExpiry
);
Parámetros
phCredential[in, optional]
Identificador de las credenciales del servidor. El servidor llama a la función AcquireCredentialsHandle (Digest) con la marca SECPKG_CRED_INBOUND o SECPKG_CRED_BOTH establecida para recuperar este identificador.
phContext[in, out, optional]
Puntero a una estructura CtxtHandle . En la primera llamada a AcceptSecurityContext (Digest),este puntero es NULL
. En las llamadas posteriores, phContext es el identificador del contexto parcialmente formado que se devolvió en el parámetro phNewContext por la primera llamada.
Advertencia
No use el mismo identificador de contexto en llamadas simultáneas a AcceptSecurityContext (Digest). 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 (Digest) que contiene el descriptor de búfer de entrada.
En la tabla siguiente se muestra la configuración del búfer para HTTP de resumen. El primer búfer debe ser de tipo SECBUFFER_TOKEN y el resto debe ser de tipo SECBUFFER_PKG_PARAMS. SASL solo requiere cero de búfer.
Tipo de búfer #/buffer | Significado |
---|---|
0 SECBUFFER_TOKEN |
Está vacío para la primera llamada y la respuesta de desafío recibida del cliente para la segunda llamada. |
1 SECBUFFER_PKG_PARAMS |
Método. Los caracteres son formato de línea de conexión de la línea de solicitud. Caracteres de un solo byte de US ASCII. |
2 SECBUFFER_PKG_PARAMS |
Reservado. |
3 SECBUFFER_PKG_PARAMS |
HEntity. Representación hexadecimal de H(entity-body). Caracteres de un solo byte de US ASCII. |
4 SECBUFFER_PKG_PARAMS |
Reino. Cadena de dominio para el desafío. Cadena Unicode que debe representarse en US ASCII. |
5 | SECBUFFER_CHANNEL_BINDINGS SECBUFFER_READONLY |
Contiene el valor del token de enlace de canal. Windows Server 2008, Windows Vista, Windows Server 2003 y Windows XP: Este valor no se admite. |
fContextReq[in]
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 |
---|---|
ASC_REQ_ALLOCATE_MEMORY | El resumen asigna búferes de salida por usted. Cuando haya terminado de usar los búferes de salida, liberelos llamando a la función FreeContextBuffer . |
ASC_REQ_ALLOW_MISSING_BINDINGS | Indica que Digest no requiere enlaces de canal para canales internos y externos. Este valor se usa para la compatibilidad con versiones anteriores cuando no se conoce la compatibilidad con el enlace de canal de punto de conexión. Este valor es mutuamente excluyente con ASC_REQ_PROXY_BINDINGS. Windows Server 2008, Windows Vista, Windows Server 2003 y Windows XP: Este valor no se admite. |
ASC_REQ_CONFIDENTIALITY | Cifrar y descifrar mensajes. El SSP de resumen solo admite esta marca para SASL. |
ASC_REQ_PROXY_BINDINGS | Indica que Digest requiere enlace de canal. Este valor es mutuamente excluyente con ASC_REQ_ALLOW_MISSING_BINDINGS. Windows Server 2008, Windows Vista, Windows Server 2003 y Windows XP: Este valor no se admite. |
ASC_REQ_CONNECTION | El contexto de seguridad no controlará los mensajes de formato. |
ASC_REQ_EXTENDED_ERROR | Cuando se produzcan errores, se notificará a la entidad remota. |
ASC_REQ_HTTP (0x10000000) | Use Digest para HTTP. Omita esta marca para usar Digest como mecanismo SASL. |
ASC_REQ_INTEGRITY | Firmar mensajes y comprobar firmas. |
ASC_REQ_REPLAY_DETECT | Detectar paquetes reproducidos. |
ASC_REQ_SEQUENCE_DETECT | Detectar mensajes recibidos fuera de secuencia. |
Para conocer las posibles marcas de atributo 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 .
TargetDataRep[in]
Representación de datos, como el orden de bytes, en el destino. Este parámetro puede ser SECURITY_NATIVE_DREP o SECURITY_NETWORK_DREP.
Este parámetro no se usa con el SSP de resumen. Cuando use digest SSP, especifique cero para este parámetro.
phNewContext[in, out, optional]
Puntero a una estructura CtxtHandle . En la primera llamada a AcceptSecurityContext (Digest),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 . phNewContext nunca debe ser NULL
.
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 (Digest). 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.
pfContextAttr[out]
Puntero a una variable que recibe un conjunto de marcas de bits que indican los atributos del contexto establecido. Para obtener una descripción de los distintos atributos, consulte 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.
ptsTimeStamp[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 la hora local.
Este parámetro se establece en un tiempo máximo constante. No hay tiempo de expiración para las credenciales o el contexto de seguridadde digest o cuando se usa el SSP de resumen.
Nota:
Hasta la última llamada del proceso de autenticación, la hora de expiración del contexto puede ser incorrecta porque 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 valores siguientes:
Código devuelto + valor | Descripción |
---|---|
SEC_E_INSUFFICIENT_MEMORY0x80090300L |
Error en la función. No hay suficiente memoria disponible para completar la acción solicitada. |
SEC_E_INTERNAL_ERROR0x80090304L |
Error en la función. Error que no se asignación a un código de error de SSPI. |
SEC_E_INVALID_HANDLE0x80100003L |
Error en la función. El identificador pasado a la función no es válido. |
SEC_E_INVALID_TOKEN0x80090308L |
Error en la función. El token pasado a la función no es válido. |
SEC_E_LOGON_DENIED0x8009030CL |
Error en el inicio de sesión. |
SEC_E_NO_AUTHENTICATING_AUTHORITY0x80090311L |
Error en la función. No se pudo establecer contacto con ninguna autoridad para la autenticación. Esto podría deberse a las siguientes condiciones: -El nombre de dominio de la entidad de autenticación es incorrecto. -El dominio no está disponible. -Error en la relación de confianza. |
SEC_E_NO_CREDENTIALS0x8009030EL |
Error en la función. El identificador de credenciales especificado en el parámetro phCredential no es válido. |
SEC_E_OK0x00000000L |
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_SECURITY_QOS_FAILED0x80090332L |
Error en la función. Se especificó una marca de atributo de contexto que no es válida en el parámetro fContextReq . |
SEC_I_COMPLETE_AND_CONTINUE0x00090314L |
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 espera un token de retorno del cliente y, a continuación, realiza otra llamada a AcceptSecurityContext (Digest). |
SEC_I_COMPLETE_NEEDED0x00090313L |
La función se ha realizado correctamente. El servidor debe terminar de compilar el mensaje desde el cliente y, a continuación, llamar a la función CompleteAuthToken . |
SEC_I_CONTINUE_NEEDED0x00090312L |
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 (Digest). |
STATUS_LOGON_FAILURE0xC000006DL |
Error en la función. Se llamó a la función AcceptSecurityContext (Digest) después de establecer el contexto especificado. |
SEC_E_BAD_BINDINGS0x80090346L |
Error en la función. No se cumplió la directiva de enlace de canal. |
Comentarios
La función AcceptSecurityContext (Digest) es el homólogo del servidor de la función InitializeSecurityContext (Digest).
Cuando el servidor recibe una solicitud de un cliente, el servidor usa el parámetro fContextReq para especificar lo que requiere de la sesión. De este modo, un servidor puede especificar que los clientes deben ser capaces de usar una sesión confidencial o de comprobación de integridad, y puede rechazar los clientes que no pueden satisfacer esa demanda. Como alternativa, un servidor no puede requerir nada y lo que el cliente pueda proporcionar o requiere se devuelve en el parámetro pfContextAttr .
Para un paquete que admita la autenticación de varias piernas, como la autenticación mutua, la secuencia de llamada es la siguiente:
- El cliente transmite un token al servidor.
- El servidor llama a AcceptSecurityContext (Digest) la primera vez, que genera un token de respuesta que luego se envía al cliente.
- El cliente recibe el token y lo pasa a InitializeSecurityContext (Digest). Si InitializeSecurityContext (Digest) devuelve SEC_E_OK, se ha completado la autenticación mutua y se puede iniciar una sesión segura. Si InitializeSecurityContext (Digest) devuelve un código de error, finaliza la negociación de autenticación mutua. De lo contrario, el token de seguridad devuelto por InitializeSecurityContext (Digest) se envía al cliente y se repiten los pasos 2 y 3.
- No use el valor phContext en llamadas simultáneas a AcceptSecurityContext (Digest). La implementación de los proveedores de seguridad no es segura para subprocesos.
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, consulte Requisitos de contexto.
Nota:
El parámetro pfContextAttr es válido en cualquier devolución correcta, pero solo en la devolución correcta final debe examinar las marcas relativas a los aspectos de seguridad del contexto. Los retornos intermedios 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ó confidencialidad (cifrado), pero no se pudo establecer, algunas aplicaciones pueden optar por apagar la conexión inmediatamente. Si no se puede establecer el contexto de seguridad , el servidor debe liberar el contexto parcialmente creado llamando a la función DeleteSecurityContext . Para obtener información sobre cuándo llamar a la función DeleteSecurityContext , vea 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 | Value |
---|---|
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 [solo aplicaciones de escritorio] |
Encabezado | Sspi.h (incluya Security.h) |
Biblioteca | Secur32.lib |
Archivo DLL | Secur32.dll |
Consulte también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de