다음을 통해 공유


SspiAcceptSecurityContextAsync 함수(sspi.h)

SspiAcceptSecurityContextAsync 함수를 사용하면 전송 애플리케이션의 서버 구성 요소가 서버와 원격 클라이언트 간에 보안 컨텍스트를 비동기적으로 설정할 수 있습니다. 원격 클라이언트는 SspiInitializeSecurityContextAsync 함수를 호출하여 보안 컨텍스트를 설정하는 프로세스를 비동기적으로 시작합니다.

메모

이 함수는 AcceptSecurityContext 함수대한 비동기 함수 역할을 합니다.

통사론

SECURITY_STATUS SspiAcceptSecurityContextAsync(
  SspiAsyncContext *AsyncContext,
  PCredHandle      phCredential,
  PCtxtHandle      phContext,
  PSecBufferDesc   pInput,
  unsigned long    fContextReq,
  unsigned long    TargetDataRep,
  PCtxtHandle      phNewContext,
  PSecBufferDesc   pOutput,
  unsigned long    *pfContextAttr,
  PTimeStamp       ptsExpiry
);

매개 변수

AsyncContext

비동기 호출 컨텍스트입니다.

phCredential

서버 자격 증명에 대한 핸들입니다. 이 핸들을 검색하기 위해 서버는 SECPKG_CRED_INBOUND 또는 SECPKG_CRED_BOTH 플래그 집합을 사용하여 SspiAcquireCredentialsHandleAsync 함수를 호출합니다.

phContext

CtxtHandle 구조체에 대한 포인터입니다. SspiAcceptSecurityContextAsync대한 첫 번째 호출에서 이 포인터는 NULL. 후속 호출에서 phContext 첫 번째 호출에서 phNewContext 매개 변수에 반환된 부분적으로 구성된 컨텍스트를 지정합니다.

pInput

SspiInitializeSecurityContextAsync대한 클라이언트 호출에 의해 생성된 SecBufferDesc 구조체에 대한 포인터입니다. 구조체에는 입력 버퍼 설명자가 포함됩니다.

첫 번째 버퍼는 SECBUFFER_TOKEN 형식이어야 하며 클라이언트에서 받은 보안 토큰을 포함해야 합니다. 두 번째 버퍼는 SECBUFFER_EMPTY형식이어야 합니다.

fContextReq

컨텍스트를 설정하는 데 서버에서 필요한 특성을 지정하는 비트 플래그입니다.

매개 변수 값의 전체 목록은 AcceptSecurityContext: fContextReq 참조하세요.

TargetDataRep

대상의 바이트 순서 지정과 같은 데이터 표현입니다. 이 매개 변수는 SECURITY_NATIVE_DREP 또는 SECURITY_NETWORK_DREP수 있습니다.

phNewContext

CtxtHandle 구조체에 대한 포인터입니다. SspiAcceptSecurityContextAsync대한 첫 번째 호출에서 이 포인터는 새 컨텍스트 핸들을 받습니다. 후속 호출에서 phNewContextphContext 매개 변수에 지정된 핸들과 같을 수 있습니다.

pOutput

출력 버퍼 설명자를 포함하는 SecBufferDesc 구조체에 대한 포인터입니다. 이 버퍼는 SspiInitializeSecurityContextAsync대한 추가 호출에 대한 입력을 위해 클라이언트로 전송됩니다. 함수가 SEC_E_OK 반환하는 경우에도 출력 버퍼가 생성될 수 있습니다. 생성된 모든 버퍼를 클라이언트 애플리케이션으로 다시 보내야 합니다.

출력 시 이 버퍼는 비동기 보안 컨텍스트에 대한 토큰을 받습니다. 토큰을 클라이언트로 보내야 합니다. 함수는 SECBUFFER_EXTRA 형식의 버퍼를 반환할 수도 있습니다.

pfContextAttr

설정된 컨텍스트의 특성을 나타내는 비트 플래그 집합에 대한 포인터입니다.

특성에 대한 설명은 AcceptSecurityContext: pfContextAttr 참조하세요.

ptsExpiry

컨텍스트의 만료 시간을 수신하는 TimeStamp 구조체에 대한 포인터입니다.

AcceptSecurityContext: ptsExpiry참조하세요.

반환 값

보안 컨텍스트를 설정하기 위한 비동기 요청이 실행을 위해 성공적으로 큐에 대기된 경우 SEC_E_OK 반환합니다. 그렇지 않으면 큐에 대기하려고 시도하여 생성된 오류를 반환합니다. 작업의 상태를 검색하려면 SspiGetAsyncCallStatus사용합니다.

클라이언트로부터 받은 보안 컨텍스트가 수락된 경우 SspiGetAsyncCallStatus는 아래 표에 SEC_E_OK 또는 SSPI 코드 중 하나를 반환합니다. 그렇지 않으면 호출이 아직 진행 중인 경우 SEC_I_ASYNC_CALL_PENDING 반환하거나 아래 두 번째 표에서 다음과 같은 심각한 오류 코드를 반환할 수 있습니다.

반환 코드
묘사
SEC_E_INCOMPLETE_MESSAGE
0x80090318L
함수가 성공했습니다. 입력 버퍼의 데이터가 불완전합니다. 애플리케이션은 클라이언트에서 추가 데이터를 읽고 SspiAcceptSecurityContextAsync를 다시 호출해야 합니다.
SEC_I_COMPLETE_AND_CONTINUE
0x00090314L
함수가 성공했습니다. 서버는 CompleteAuthToken 호출하고 출력 토큰을 클라이언트에 전달해야 합니다. 그런 다음 서버는 SspiAcceptSecurityContextAsync를 다시 호출하기 전에 클라이언트에서 반환 토큰을 기다려야 합니다.
SEC_I_COMPLETE_NEEDED
0x00090313L
함수가 성공했습니다. CompleteAuthToken호출하기 전에 서버에서 클라이언트에서 메시지 빌드를 완료해야 합니다.
SEC_I_CONTINUE_NEEDED
0x00090312L
함수가 성공했습니다. 서버는 출력 토큰을 클라이언트에 보내고 반환된 토큰을 기다려야 합니다. 반환된 토큰은 SspiAcceptSecurityContextAsync에 대한 다른 호출에 대해 pInput 전달되어야 합니다.

심각한 오류 코드

반환 코드
묘사
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_UNSUPPORTED_FUNCTION
0x80090302L
함수가 실패했습니다. fContextReq 매개 변수는 잘못된 컨텍스트 특성 플래그(ASC_REQ_DELEGATE 또는 ASC_REQ_PROMPT_FOR_CREDS)를 지정했습니다.

발언

SspiAcceptSecurityContextAsync 함수는 SspiInitializeSecurityContextAsync 함수에 대응하는 서버 함수입니다.

호출자는 최종 컨텍스트 특성이 충분한지 여부를 결정합니다. 예를 들어 기밀성(암호화)을 요청했지만 설정할 수 없는 경우 일부 애플리케이션은 연결을 즉시 종료하도록 선택할 수 있습니다. 보안 컨텍스트를 설정할 수 없는 경우 서버는 SspiDeleteSecurityContextAsync 함수를 호출하여 부분적으로 생성된 컨텍스트를 해제해야 합니다.

추가 설명은 AcceptSecurityContext 참조하세요.

요구 사항

요구
지원되는 최소 클라이언트 Windows 10 버전 1607 [커널 모드 드라이버만 해당]
지원되는 최소 서버 Windows Server 2016 [커널 모드 드라이버만 해당]
헤더 sspi.h

참고 항목

AcceptSecurityContext

컨텍스트 요구 사항

ImpersonateSecurityContext

SspiAcquireCredentialsHandleAsync

SspiDeleteSecurityContextAsync

SspiGetAsyncCallStatus