Функция AcceptSecurityContext (sspi.h)

Функция AcceptSecurityContext (CredSSP) позволяет компоненту сервера транспортного приложения установить контекст безопасности между сервером и удаленным клиентом. Удаленный клиент вызывает функцию InitializeSecurityContext (CredSSP), чтобы начать процесс создания контекста безопасности. Серверу может потребоваться один или несколько маркеров ответа от удаленного клиента для завершения установки контекста безопасности.

Синтаксис

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
);

Параметры

[in, optional] phCredential

Дескриптор учетных данных сервера. Чтобы получить этот дескриптор, сервер вызывает функцию AcquireCredentialsHandle (CredSSP) с установленным флагом SECPKG_CRED_INBOUND или SECPKG_CRED_BOTH.

[in, optional] phContext

Указатель на структуру CtxtHandle . При первом вызове AcceptSecurityContext (CredSSP) этот указатель имеет значение NULL. При последующих вызовах phContext указывает частично сформированный контекст, возвращаемый в параметре phNewContext при первом вызове.

[in, optional] pInput

Указатель на структуру SecBufferDesc, созданную вызовом метода InitializeSecurityContext (CredSSP). Структура содержит дескриптор входного буфера.

Первый буфер должен иметь тип SECBUFFER_TOKEN и содержать маркер безопасности, полученный от клиента. Второй буфер должен иметь тип SECBUFFER_EMPTY.

[in] fContextReq

-Битовые флаги, указывающие атрибуты, необходимые серверу для установки контекста. Битовые флаги можно объединять с помощью побитовых операций ИЛИ . Этот параметр может иметь одно или несколько из следующих значений.

Значение Значение
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 .

[in] TargetDataRep

Представление данных, например порядок байтов, в целевом объекте. Этот параметр может быть SECURITY_NATIVE_DREP или SECURITY_NETWORK_DREP.

[in, out, optional] phNewContext

Указатель на структуру CtxtHandle . При первом вызове AcceptSecurityContext (CredSSP) этот указатель получает новый дескриптор контекста. При последующих вызовах phNewContext может совпадать с дескриптором, указанным в параметре phContext .

[in, out, optional] pOutput

Указатель на структуру SecBufferDesc , содержащую дескриптор выходного буфера. Этот буфер отправляется клиенту для ввода в дополнительные вызовы InitializeSecurityContext (CredSSP). Выходной буфер может быть создан, даже если функция возвращает SEC_E_OK. Любой созданный буфер должен быть отправлен обратно в клиентское приложение.

На выходе этот буфер получает маркер для контекста безопасности. Маркер должен быть отправлен клиенту. Функция также может возвращать буфер типа SECBUFFER_EXTRA.

[out] pfContextAttr

Указатель на набор битовых флагов, указывающих атрибуты установленного контекста. Описание различных атрибутов см. в разделе Требования к контексту. Флаги, используемые для этого параметра, имеют префикс ASC_RET, например ASC_RET_DELEGATE.

Не проверка атрибутов, связанных с безопасностью, до тех пор, пока не будет успешно выполнен окончательный вызов функции. Флаги атрибутов, не связанные с безопасностью, такие как флаг ASC_RET_ALLOCATED_MEMORY, можно проверить перед окончательным возвратом.

[out, optional] ptsExpiry

Указатель на структуру TimeStamp , которая получает время окончания срока действия контекста. Рекомендуется, чтобы пакет безопасности всегда возвращал это значение по местному времени.

Примечание До последнего вызова процесса проверки подлинности время окончания срока действия контекста может быть неверным, так как на более поздних этапах согласования будут предоставлены дополнительные сведения. Таким образом, значение ptsTimeStamp должно иметь значение NULL до последнего вызова функции.
 

Возвращаемое значение

Эта функция возвращает одно из следующих значений.

Возвращаемый код/значение Описание
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
0x00000000L
Функция выполнена успешно. Контекст безопасности, полученный от клиента, был принят. Если функция сгенерировала выходной маркер, маркер должен быть отправлен клиентскому процессу.
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 [только классические приложения]
Целевая платформа Windows
Header sspi.h (включая Security.h)
Библиотека Secur32.lib
DLL Secur32.dll

См. также раздел

DeleteSecurityContext

InitializeSecurityContext (CredSSP)

Функции SSPI