다음을 통해 공유


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