Функция AcceptSecurityContext (CredSSP)
Функция AcceptSecurityContext (CredSSP) позволяет компоненту сервера транспортного приложения установить контекст безопасности между сервером и удаленным клиентом. Удаленный клиент вызывает функцию InitializeSecurityContext (CredSSP), чтобы запустить процесс установления контекста безопасности. Серверу может потребоваться один или несколько маркеров ответа от удаленного клиента, чтобы завершить установку контекста безопасности.
Синтаксис
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
);
Параметры
phCredential [in, optional]
Дескриптор учетных данных сервера. Чтобы получить этот дескриптор, сервер вызывает функцию AcquireCredentialsHandle (CredSSP) с набором флагов SECPKG_CRED_INBOUND или SECPKG_CRED_BOTH.
phContext [in, optional]
Указатель на структуру CtxtHandle . При первом вызове AcceptSecurityContext (CredSSP) этот указатель имеется NULL
. При последующих вызовах phContext указывает частично сформированный контекст, возвращаемый в параметре phNewContext первым вызовом.
Предупреждение
Не используйте тот же дескриптор контекста в одновременных вызовах AcceptSecurityContext (CredSSP). Реализация API в поставщиках служб безопасности не является потокобезопасной.
pInput [in, optional]
Указатель на структуру SecBufferDesc, созданную вызовом клиента в InitializeSecurityContext (CredSSP). Структура содержит дескриптор входного буфера.
Первый буфер должен быть типом SECBUFFER_TOKEN и содержать маркер безопасности, полученный от клиента. Второй буфер должен иметь тип SECBUFFER_EMPTY.
fContextReq [in]
-Битовые флаги, указывающие атрибуты, необходимые серверу для установления контекста. Битовые флаги можно объединить с помощью побитовых операций OR . Этот параметр может быть одним или несколькими из следующих значений.
Значение | Значение |
---|---|
ASC_REQ_ALLOCATE_MEMORY | Поставщик поддержки безопасности учетных данных (CredSSP) выделяет выходные буферы. Завершив использование выходных буферов, освободите их, вызвав функцию FreeContextBuffer . |
ASC_REQ_CONNECTION | Контекст безопасности не будет обрабатывать сообщения форматирования. |
ASC_REQ_DELEGATE | Сервер может олицетворить клиента. Игнорировать этот флаг для ограниченного делегирования. |
ASC_REQ_EXTENDED_ERROR | При возникновении ошибок удаленная сторона будет уведомлена. |
ASC_REQ_REPLAY_DETECT | Обнаружение повторяемых пакетов. |
ASC_REQ_SEQUENCE_DETECT | Обнаружение сообщений, полученных из последовательности. |
ASC_REQ_STREAM | Поддержка потокового подключения. |
Возможные флаги атрибутов и их значения см. в разделе "Требования к контексту". Флаги, используемые для этого параметра, префиксируются ASC_REQ, например ASC_REQ_DELEGATE.
Запрошенные атрибуты могут не поддерживаться клиентом. Дополнительные сведения см. в параметре pfContextAttr .
TargetDataRep [in]
Представление данных, например упорядочение байтов, на целевом объекте. Этот параметр может быть либо SECURITY_NATIVE_DREP, либо SECURITY_NETWORK_DREP.
phNewContext [in, out, optional]
Указатель на структуру CtxtHandle . При первом вызове AcceptSecurityContext (CredSSP) этот указатель получает новый дескриптор контекста. При последующих вызовах phNewContext может совпадать с дескриптором, указанным в параметре phContext.
pOutput [in, out, optional]
Указатель на структуру SecBufferDesc , содержащую дескриптор выходного буфера. Этот буфер отправляется клиенту для ввода дополнительных вызовов InitializeSecurityContext (CredSSP). Выходной буфер может быть создан, даже если функция возвращает SEC_E_OK. Любой созданный буфер необходимо отправить обратно в клиентское приложение.
В выходных данных этот буфер получает маркер для контекста безопасности. Маркер должен быть отправлен клиенту. Функция также может возвращать буфер типа SECBUFFER_EXTRA.
pfContextAttr [out]
Указатель на набор битовых флагов, указывающих атрибуты установленного контекста. Описание различных атрибутов см. в разделе "Требования к контексту". Флаги, используемые для этого параметра, префиксируются ASC_RET, например ASC_RET_DELEGATE.
Не проверяйте наличие атрибутов, связанных с безопасностью, пока окончательный вызов функции не будет успешно возвращен. Флаги атрибутов, не связанные с безопасностью, например флагом ASC_RET_ALLOCATED_MEMORY, можно проверить перед окончательным возвратом.
ptsExpiry [out, optional]
Указатель на структуру TimeStamp , которая получает время окончания срока действия контекста. Рекомендуется всегда возвращать это значение в локальное время.
Примечание.
До последнего вызова процесса проверки подлинности срок действия контекста может быть неверным, так как дополнительные сведения будут предоставлены на последующих этапах согласования. Поэтому ptsTimeStamp должен быть NULL
до последнего вызова функции.
Возвращаемое значение
Эта функция возвращает одно из следующих значений.
Возврат кода или значения | Description |
---|---|
SEC_E_INCOMPLETE_MESSAGE 0x80090318L |
Функция выполнена успешно. Данные во входном буфере неполны. Приложение должно считывать дополнительные данные из клиента и снова вызывать AcceptSecurityContext (CredSSP). |
SEC_E_INSUFFICIENT_MEMORY 0x80090300L |
Не удалось выполнить функцию. Для выполнения запрошенного действия недостаточно памяти. |
SEC_E_INTERNAL_ERROR 0x80090304L |
Не удалось выполнить функцию. Произошла ошибка, которая не сопоставлялась с кодом ошибки SSPI. |
SEC_E_INVALID_HANDLE 0x80100003L |
Не удалось выполнить функцию. Дескриптор, переданный функции, недопустим. |
SEC_E_INVALID_TOKEN 0x80090308L |
Не удалось выполнить функцию. Маркер, переданный функции, недопустим. |
SEC_E_LOGON_DENIED 0x8009030CL |
Сбой входа. |
SEC_E_NO_AUTHENTICATING_AUTHORITY 0x80090311L |
Не удалось выполнить функцию. Для проверки подлинности не удается связаться с центром. Это может быть вызвано следующими условиями:
|
SEC_E_NO_CREDENTIALS 0x8009030EL |
Не удалось выполнить функцию. Дескриптор учетных данных, указанный в параметре phCredential , недопустим. |
SEC_E_OK 0x000000000L |
Функция выполнена успешно. Контекст безопасности, полученный от клиента, был принят. Если функция создала выходной маркер, маркер должен быть отправлен в клиентский процесс. |
SEC_E_UNSUPPORTED_FUNCTION 0x80090302L |
Не удалось выполнить функцию. Параметр fContextReq указал флаг атрибута контекста (ASC_REQ_DELEGATE или ASC_REQ_PROMPT_FOR_CREDS), который недействителен. |
SEC_I_COMPLETE_AND_CONTINUE 0x00090314L |
Функция выполнена успешно. Сервер должен вызвать CompleteAuthToken и передать выходной маркер клиенту. Затем сервер должен ждать возвращаемого маркера от клиента, прежде чем выполнять другой вызов AcceptSecurityContext (CredSSP). |
SEC_I_COMPLETE_NEEDED 0x00090313L |
Функция выполнена успешно. Перед вызовом CompleteAuthToken сервер должен завершить сборку сообщения от клиента. |
SEC_I_CONTINUE_NEEDED 0x00090312L |
Функция выполнена успешно. Сервер должен отправить выходной маркер клиенту и ждать возвращаемого маркера. Возвращаемый маркер должен передаваться в pInput для другого вызова AcceptSecurityContext (CredSSP). |
Замечания
Функция AcceptSecurityContext (CredSSP) является аналогом сервера функции InitializeSecurityContext (CredSSP).
Когда сервер получает запрос от клиента, он использует параметр fContextReq , чтобы указать, что требуется для сеанса. Таким образом, серверу может потребоваться, чтобы клиенты могли использовать конфиденциальный или проверенный сеанс целостности; он может отклонить клиентов, которые не могут соответствовать этому требованию. Кроме того, сервер не может требовать ничего; Независимо от того, что требует клиент или может предоставить, возвращается в параметре pfContextAttr .
Параметры fContextReq и pfContextAttr представляют собой битовые маски, представляющие различные атрибуты контекста. Описание различных атрибутов см. в разделе "Требования к контексту".
Примечание.
Хотя параметр pfContextAttr действителен при любом успешном возвращении, следует проверить флаги, относящиеся к аспектам безопасности контекста только при окончательном успешном возвращении. Промежуточные возвращаемые значения могут задавать, например, флаг ISC_RET_ALLOCATED_MEMORY.
Вызывающий объект отвечает за определение достаточности конечных атрибутов контекста. Например, если была запрошена конфиденциальность (шифрование), но не удалось установить, некоторые приложения могут немедленно завершить работу подключения. Если не удается установить контекст безопасности, сервер должен освободить частично созданный контекст, вызвав функцию DeleteSecurityContext . Сведения о том, когда следует вызывать функцию DeleteSecurityContext , см. в разделе DeleteSecurityContext.
После установки контекста безопасности серверное приложение может использовать функцию QuerySecurityContextToken для получения дескриптора учетной записи пользователя, с которой сопоставлен сертификат клиента. Кроме того, сервер может использовать функцию ImpersonateSecurityContext для олицетворения пользователя.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 [только классические приложения] |
Верхний колонтитул | Sspi.h (include Security.h) |
Библиотека | Secur32.lib |
DLL-библиотеки | Secur32.dll |