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
서버 자격 증명에 대한 핸들입니다. 이 핸들을 검색하기 위해 서버는 SECPKG_CRED_INBOUND 또는 SECPKG_CRED_BOTH 플래그 집합을 사용하여 AcquireCredentialsHandle(CredSSP) 함수를 호출합니다.
[in, optional] phContext
CtxtHandle 구조체에 대한 포인터입니다. AcceptSecurityContext(CredSSP)에 대한 첫 번째 호출에서 이 포인터는 NULL입니다. 후속 호출에서 phContext 는 첫 번째 호출에 의해 phNewContext 매개 변수에 반환된 부분적으로 구성된 컨텍스트를 지정합니다.
[in, optional] pInput
InitializeSecurityContext(CredSSP)에 대한 클라이언트 호출에 의해 생성된 SecBufferDesc 구조체에 대한 포인터입니다. 구조체에는 입력 버퍼 설명자가 포함됩니다.
첫 번째 버퍼는 SECBUFFER_TOKEN 형식이어야 하며 클라이언트에서 받은 보안 토큰을 포함해야 합니다. 두 번째 버퍼는 SECBUFFER_EMPTY 형식이어야 합니다.
[in] fContextReq
-서버에서 컨텍스트를 설정하는 데 필요한 특성을 지정하는 비트 플래그입니다. 비트 OR 연산을 사용하여 비트 플래그를 결합할 수 있습니다. 이 매개 변수는 다음 값 중 하나 이상일 수 있습니다.
값 | 의미 |
---|---|
|
CredSSP(자격 증명 보안 지원 공급자)는 출력 버퍼를 할당합니다. 출력 버퍼 사용을 마쳤으면 FreeContextBuffer 함수를 호출하여 해제합니다. |
|
보안 컨텍스트는 메시지 서식을 처리하지 않습니다. |
|
서버는 클라이언트를 가장할 수 있습니다. 제한된 위임에 대해 이 플래그를 무시합니다. |
|
오류가 발생하면 원격 당사자에게 알림이 표시됩니다. |
|
재생된 패킷을 검색합니다. |
|
시퀀스에서 수신된 메시지를 검색합니다. |
|
스트림 지향 연결을 지원합니다. |
가능한 특성 플래그 및 해당 의미는 컨텍스트 요구 사항을 참조하세요. 이 매개 변수에 사용되는 플래그에는 접두사로 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 구조체에 대한 포인터입니다. 보안 패키지는 항상 현지 시간에 이 값을 반환하는 것이 좋습니다.
반환 값
이 함수는 다음 값 중 하나를 반환합니다.
반환 코드/값 | 설명 |
---|---|
|
함수가 성공했습니다. 입력 버퍼의 데이터가 불완전합니다. 애플리케이션은 클라이언트에서 추가 데이터를 읽고 AcceptSecurityContext(CredSSP) 를 다시 호출해야 합니다. |
|
함수가 실패했습니다. 요청된 작업을 완료하는 데 사용할 수 있는 메모리가 부족합니다. |
|
함수가 실패했습니다. SSPI 오류 코드에 매핑되지 않은 오류가 발생했습니다. |
|
함수가 실패했습니다. 함수에 전달된 핸들이 잘못되었습니다. |
|
함수가 실패했습니다. 함수에 전달된 토큰이 잘못되었습니다. |
|
로그온에 실패했습니다. |
|
함수가 실패했습니다. 인증을 위해 연락할 수 있는 권한은 없습니다. 이는 다음과 같은 조건 때문일 수 있습니다.
|
|
함수가 실패했습니다. phCredential 매개 변수에 지정된 자격 증명 핸들이 잘못되었습니다. |
|
함수가 성공했습니다. 클라이언트에서 받은 보안 컨텍스트가 수락되었습니다. 함수가 출력 토큰을 생성한 경우 토큰을 클라이언트 프로세스로 보내야 합니다. |
|
함수가 실패했습니다. fContextReq 매개 변수는 잘못된 컨텍스트 특성 플래그(ASC_REQ_DELEGATE 또는 ASC_REQ_PROMPT_FOR_CREDS)를 지정했습니다. |
|
함수가 성공했습니다. 서버는 CompleteAuthToken 을 호출하고 출력 토큰을 클라이언트에 전달해야 합니다. 그런 다음 서버는 클라이언트에서 반환 토큰을 기다린 후 AcceptSecurityContext(CredSSP)를 다시 호출해야 합니다. |
|
함수가 성공했습니다. 서버는 CompleteAuthToken을 호출하기 전에 클라이언트에서 메시지 빌드를 완료해야 합니다. |
|
함수가 성공했습니다. 서버는 출력 토큰을 클라이언트에 보내고 반환된 토큰을 기다려야 합니다. 반환된 토큰은 AcceptSecurityContext(CredSSP)에 대한 다른 호출을 위해 pInput으로 전달되어야 합니다. |
설명
AcceptSecurityContext(CredSSP) 함수는 InitializeSecurityContext(CredSSP) 함수에 대응하는 서버입니다.
서버가 클라이언트로부터 요청을 받으면 fContextReq 매개 변수를 사용하여 세션에 필요한 항목을 지정합니다. 이러한 방식으로 서버는 클라이언트가 기밀 또는 무결성 검사 세션을 사용할 수 있도록 요구할 수 있습니다. 해당 요구를 충족할 수 없는 클라이언트를 거부할 수 있습니다. 또는 서버에 아무 것도 필요하지 않습니다. 클라이언트가 요구하거나 제공할 수 있는 모든 항목이 pfContextAttr 매개 변수에 반환됩니다.
fContextReq 및 pfContextAttr 매개 변수는 다양한 컨텍스트 특성을 나타내는 비트 마스크입니다. 다양한 특성에 대한 설명은 컨텍스트 요구 사항을 참조하세요.
보안 컨텍스트가 설정된 후 서버 애플리케이션은 QuerySecurityContextToken 함수를 사용하여 클라이언트 인증서가 매핑된 사용자 계정에 대한 핸들을 검색할 수 있습니다. 또한 서버는 ImpersonateSecurityContext 함수를 사용하여 사용자를 가장할 수 있습니다.
요구 사항
지원되는 최소 클라이언트 | Windows Vista [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2008 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | sspi.h(Security.h 포함) |
라이브러리 | Secur32.lib |
DLL | Secur32.dll |