Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция AcceptSecurityContext (General) позволяет компоненту сервера транспортного приложения установить контекст безопасности между сервером и удаленным клиентом. Удаленный клиент использует функцию InitializeSecurityContext (General) для запуска процесса установления контекста безопасности. Серверу может потребоваться один или несколько маркеров ответа от удаленного клиента, чтобы завершить установку контекста безопасности.
Сведения об использовании этой функции с определенным поставщиком поддержки безопасности (SSP) см. в следующих разделах.
Тема | Описание |
---|---|
AcceptSecurityContext (CredSSP) | Позволяет компоненту сервера транспортного приложения установить контекст безопасности между сервером и удаленным клиентом с помощью поставщика поддержки безопасности учетных данных (CredSSP). |
AcceptSecurityContext (Дайджест) | Позволяет компоненту сервера транспортного приложения установить контекст безопасности между сервером и удаленным клиентом, использующим Дайджест. |
AcceptSecurityContext (Kerberos) | Позволяет компоненту сервера транспортного приложения установить контекст безопасности между сервером и удаленным клиентом, использующим Kerberos. |
AcceptSecurityContext (согласование) | Позволяет компоненту сервера транспортного приложения установить контекст безопасности между сервером и удаленным клиентом, использующим "Согласование". |
AcceptSecurityContext (NTLM) | Позволяет компоненту сервера транспортного приложения установить контекст безопасности между сервером и удаленным клиентом, использующим NTLM. |
AcceptSecurityContext (Schannel) | Позволяет компоненту сервера транспортного приложения установить контекст безопасности между сервером и удаленным клиентом, использующим Schannel. |
Синтаксис
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
);
Параметры
phCredential[in, optional]
Дескриптор учетных данных сервера. Сервер вызывает функцию AcquireCredentialsHandle (General) с флагом SECPKG_CRED_INBOUND или SECPKG_CRED_BOTH, заданным для получения этого дескриптора.
phContext[in, out]
Указатель на структуру CtxtHandle . При первом вызове AcceptSecurityContext (General) этот указатель имеется NULL
. При последующих вызовах phContext — это дескриптор частично сформированного контекста, возвращаемого в параметре phNewContext первым вызовом.
Предупреждение
Не используйте тот же дескриптор контекста в одновременных вызовах AcceptSecurityContext (General). Реализация API в поставщиках служб безопасности не является потокобезопасной.
pInput[in, optional]
Указатель на структуру SecBufferDesc , созданную вызовом клиента InitializeSecurityContext (General), которая содержит дескриптор входного буфера.
При использовании Schannel SSP первый буфер должен иметь тип SECBUFFER_TOKEN и содержать маркер безопасности, полученный от клиента. Второй буфер должен иметь тип SECBUFFER_EMPTY.
При использовании SSPS-адресов ведения переговоров, Kerberos или NTLM данные привязки канала можно указать путем передачи структуры типа SecBufferSECBUFFER_CHANNEL_BINDINGS в дополнение к буферам, созданным вызовом функции InitializeSecurityContext (General). Сведения о привязке канала для буфера привязки канала можно получить путем вызова функции QueryContextAttributes (Schannel) в контексте Schannel , используемого клиентом для проверки подлинности.
fContextReq[in]
Битовые флаги, указывающие атрибуты, необходимые серверу для установления контекста. Битовые флаги можно объединить с помощью побитовых операций OR . Этот параметр может быть одним или несколькими из следующих значений.
Ценность | Значение |
---|---|
ASC_REQ_ALLOCATE_MEMORY | Дайджест и Schannel будут выделять выходные буферы для вас. Завершив использование выходных буферов, освободите их, вызвав функцию FreeContextBuffer . |
ASC_REQ_ALLOW_MISSING_BINDINGS | Указывает, что дайджест не требует привязки каналов для внутренних и внешних каналов. Это значение используется для обратной совместимости, если поддержка привязки канала конечной точки не известна. Это значение взаимоисключающее с ASC_REQ_PROXY_BINDINGS. Это значение поддерживается только поставщиком служб дайджеста. Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: это значение не поддерживается. |
ASC_REQ_CONFIDENTIALITY | Шифрование и расшифровка сообщений. Поставщик служб дайджеста поддерживает этот флаг только для SASL. |
ASC_REQ_CONNECTION | Контекст безопасности не будет обрабатывать сообщения форматирования. |
ASC_REQ_DELEGATE | Сервер может олицетворить клиента. Допустимо для Kerberos. Игнорировать этот флаг для ограниченного делегирования. |
ASC_REQ_EXTENDED_ERROR | При возникновении ошибок удаленная сторона будет уведомлена. |
ASC_REQ_HTTP (0x10000000) | Используйте дайджест для HTTP. Опустить этот флаг, чтобы использовать Дайджест в качестве механизма SASL. |
ASC_REQ_INTEGRITY | Подписывая сообщения и проверяйте подписи. Schannel не поддерживает этот флаг. |
ASC_REQ_MUTUAL_AUTH | Клиент должен предоставить сертификат, используемый для проверки подлинности клиента. Этот флаг поддерживается только Schannel. |
ASC_REQ_PROXY_BINDINGS | Указывает, что дайджест требует привязки канала. Это значение взаимоисключающее с ASC_REQ_ALLOW_MISSING_BINDINGS. Это значение поддерживается только поставщиком служб дайджеста. Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: это значение не поддерживается. |
ASC_REQ_REPLAY_DETECT | Обнаружение повторяемых пакетов. |
ASC_REQ_SEQUENCE_DETECT | Обнаружение сообщений, полученных из последовательности. |
ASC_REQ_STREAM | Поддержка потокового подключения. Этот флаг поддерживается только Schannel. |
Возможные флаги атрибутов и их значения см. в разделе "Требования к контексту". Флаги, используемые для этого параметра, префиксируются ASC_REQ, например ASC_REQ_DELEGATE.
Запрошенные атрибуты могут не поддерживаться клиентом. Дополнительные сведения см. в параметре pfContextAttr .
TargetDataRep[in]
Представление данных, например упорядочение байтов, на целевом объекте. Этот параметр может быть либо SECURITY_NATIVE_DREP, либо SECURITY_NETWORK_DREP.
Этот параметр не используется с Schannel или дайджест-SSPS. При использовании Schannel или дайджест-SSPS укажите ноль для этого параметра.
phNewContext[in, out, optional]
Указатель на структуру CtxtHandle . При первом вызове AcceptSecurityContext (General) этот указатель получает новый дескриптор контекста. При последующих вызовах phNewContext может совпадать с дескриптором, указанным в параметре phContext.
phNewContext никогда не должен быть NULL
.
pOutput[in, out, optional]
Указатель на структуру SecBufferDesc , содержащую дескриптор выходного буфера. Этот буфер отправляется клиенту для ввода дополнительных вызовов InitializeSecurityContext (General). Выходной буфер может быть создан, даже если функция возвращает SEC_E_OK. Любой созданный буфер необходимо отправить обратно в клиентское приложение.
При использовании Schannel в выходных данных этот буфер получает маркер для контекста безопасности. Маркер должен быть отправлен клиенту. Функция также может возвращать буфер типа SECBUFFER_EXTRA. Кроме того, вызывающий объект должен передать буфер типа SECBUFFER_ALERT. Если создается оповещение, этот буфер содержит сведения об этом оповещении, а функция завершается ошибкой.
pfContextAttr[out]
Указатель на переменную, получающую набор битовых флагов, указывающих атрибуты установленного контекста. Описание различных атрибутов см. в разделе "Требования к контексту". Флаги, используемые для этого параметра, префиксируются ASC_RET, например ASC_RET_DELEGATE.
Не проверяйте наличие атрибутов, связанных с безопасностью, пока окончательный вызов функции не будет успешно возвращен. Флаги атрибутов, не связанные с безопасностью, например флагом ASC_RET_ALLOCATED_MEMORY, можно проверить перед окончательным возвратом.
ptsTimeStamp[out, optional]
Указатель на структуру TimeStamp , которая получает время окончания срока действия контекста. Рекомендуется всегда возвращать это значение в локальное время.
Этот параметр имеет постоянное максимальное время. Нет времени окончания срока действия контекстабезопасности дайджеста или учетных данных или при использовании службы "Дайджест SSP".
Это необязательно при использовании Schannel SSP. Когда удаленная сторона предоставила сертификат, используемый для проверки подлинности, этот параметр получает время окончания срока действия этого сертификата. Если сертификат не указан, возвращается максимальное значение времени.
Примечание.
До последнего вызова процесса проверки подлинности срок действия контекста может быть неверным, так как дополнительные сведения будут предоставлены на последующих этапах согласования.
Поэтому ptsTimeStamp должен быть NULL
до последнего вызова функции.
Возвращаемое значение
Эта функция возвращает одно из следующих значений.
Возврат кода или значения | Описание |
---|---|
| Не удалось выполнить функцию. Политика привязки канала не была удовлетворена. |
| Функция завершилась успешно. Данные во входном буфере неполны. Приложение должно считывать дополнительные данные из клиента и снова вызывать [AcceptSecurityContext (General)](acceptsecuritycontext--general.md). Это значение можно вернуть при использовании Schannel SSP. Дополнительные сведения об этом возвращаемом значении см. в разделе [AcceptSecurityContext (Schannel)](acceptsecuritycontext--schannel.md). |
| Не удалось выполнить функцию. Для выполнения запрошенного действия недостаточно памяти. |
| Не удалось выполнить функцию. Произошла ошибка, которая не сопоставлялась с кодом ошибки SSPI. |
| Не удалось выполнить функцию. Дескриптор, переданный функции, недопустим. |
| Не удалось выполнить функцию. Маркер, переданный функции, недопустим. |
| Сбой входа. |
| Не удалось выполнить функцию. Для проверки подлинности не удается связаться с центром. Это может быть вызвано следующими условиями:
|
| Не удалось выполнить функцию. Дескриптор учетных данных, указанный в параметре phCredential , недопустим. Это значение можно возвращать при использовании дайджеста или Schannel SSP. |
| Функция завершилась успешно. [*контекст безопасности*](.). /secgloss/s-gly.md) получено от клиента. Если выходной маркер был создан функцией, он должен быть отправлен в клиентский процесс. |
| Не удалось выполнить функцию. Недопустимый флаг атрибута контекста был указан в параметре fContextReq . Это значение можно вернуть при использовании поставщика служб дайджеста. |
| Не удалось выполнить функцию. Недопустимый флаг атрибута контекста (ASC_REQ_DELEGATE или ASC_REQ_PROMPT_FOR_CREDS) был указан в параметре fContextReq . Это значение можно вернуть при использовании Schannel SSP. |
| Функция завершилась успешно. Сервер должен вызвать [CompleteAuthToken](/windows/win32/api/sspi/nf-sspi-completeauthtoken) и передать выходной маркер клиенту. Затем сервер ожидает возвращаемого маркера от клиента, а затем вызывает еще один вызов [AcceptSecurityContext (General)](acceptsecuritycontext--general.md). |
| Функция завершилась успешно. Сервер должен завершить сборку сообщения от клиента, а затем вызвать функцию [CompleteAuthToken](/windows/win32/api/sspi/nf-sspi-completeauthtoken). |
| Функция завершилась успешно. Сервер должен отправить выходной маркер клиенту и ждать возвращаемого маркера. Возвращаемый маркер должен передаваться в pInput для другого вызова [AcceptSecurityContext (General)](acceptsecuritycontext--general.md). |
| Не удалось выполнить функцию. Функция [AcceptSecurityContext (General)](acceptsecuritycontext--general.md) была вызвана после установки указанного контекста. Это значение можно вернуть при использовании поставщика служб дайджеста. |
Замечания
Функция AcceptSecurityContext (General) является аналогом сервера функции InitializeSecurityContext (General).
Когда сервер получает запрос от клиента, сервер использует параметр fContextReq , чтобы указать, что требуется для сеанса. Таким образом, сервер может указать, что клиенты должны быть способны использовать конфиденциальный или проверенный сеанс целостности, и он может отклонять клиентов, которые не могут соответствовать этому требованию. Кроме того, сервер может требовать ничего, и любой клиент может предоставить или требуется в параметре pfContextAttr .
Для пакета, поддерживающего многоуровневую проверку подлинности, например взаимную проверку подлинности, последовательность вызовов выглядит следующим образом:
- Клиент передает маркер серверу.
- Сервер вызывает AcceptSecurityContext (General) в первый раз, который создает маркер ответа, который затем отправляется клиенту.
- Клиент получает маркер и передает его в InitializeSecurityContext (General). Если инициализацияSecurityContext (General) возвращает SEC_E_OK, то взаимная проверка подлинности завершена и может начаться безопасный сеанс. Если InitializeSecurityContext (General) возвращает код ошибки, то согласование взаимной проверки подлинности завершается. В противном случае маркер безопасности, возвращенный InitializeSecurityContext (General), отправляется клиенту, а шаги 2 и 3 повторяются.
- Не используйте значение phContext в одновременных вызовах AcceptSecurityContext (General). Реализация в поставщиках безопасности не является потокобезопасной.
Параметры fContextReq и pfContextAttr представляют собой битовые маски, представляющие различные атрибуты контекста. Описание различных атрибутов см. в разделе "Требования к контексту".
Примечание.
Параметр pfContextAttr действителен для любого успешного возврата, но только после окончательного успешного возврата следует проверить флаги, относящиеся к аспектам безопасности контекста. Промежуточные возвращаемые значения могут задавать, например, флаг ISC_RET_ALLOCATED_MEMORY.
Вызывающий объект отвечает за определение достаточности конечных атрибутов контекста. Если, например, запрашивалось конфиденциальность (шифрование), но не удалось установить, некоторые приложения могут немедленно завершить работу подключения. Если не удается установить контекст безопасности, сервер должен освободить частично созданный контекст, вызвав функцию DeleteSecurityContext. Сведения о том, когда следует вызывать функцию DeleteSecurityContext , см. в разделе DeleteSecurityContext.
После установки контекста безопасности серверное приложение может использовать функцию QuerySecurityContextToken для получения дескриптора учетной записи пользователя, с которой сопоставлен сертификат клиента. Кроме того, сервер может использовать функцию ImpersonateSecurityContext для олицетворения пользователя.
Требования
Требование | Ценность |
---|---|
Минимальный поддерживаемый клиент | Windows XP [только классические приложения] |
Минимальный поддерживаемый сервер | Windows Server 2003 [только классические приложения] |
Заголовок | Sspi.h (include Security.h) |
Библиотека | Secur32.lib |
DLL | Secur32.dll |