다음을 통해 공유


IClientSecurity::SetBlanket 메서드(objidl.h)

지정된 프록시에서 호출하는 데 사용할 인증 정보(보안 담요)를 설정합니다.

이 설정은 지정된 프록시에 대한 프로세스 기본 설정을 재정의합니다. 이 메서드를 호출하면 지정된 프록시의 다른 모든 사용자에 대한 보안 값이 변경됩니다.

구문

HRESULT SetBlanket(
  [in] IUnknown *pProxy,
  [in] DWORD    dwAuthnSvc,
  [in] DWORD    dwAuthzSvc,
  [in] OLECHAR  *pServerPrincName,
  [in] DWORD    dwAuthnLevel,
  [in] DWORD    dwImpLevel,
  [in] void     *pAuthInfo,
  [in] DWORD    dwCapabilities
);

매개 변수

[in] pProxy

프록시에 대한 포인터입니다.

[in] dwAuthnSvc

인증 서비스입니다. 인증 서비스 상수 목록에서 가져온 단일 값입니다. 인증이 필요하지 않은 경우 RPC_C_AUTHN_NONE 사용합니다. RPC_C_AUTHN_DEFAULT 지정되면 COM은 일반적인 보안 담요 협상 알고리즘에 따라 인증 서비스를 선택합니다.

[in] dwAuthzSvc

권한 부여 서비스입니다. 권한 부여 상수 목록에서 가져온 단일 값입니다. RPC_C_AUTHZ_DEFAULT 지정되면 COM은 정상적인 보안 담요 협상 알고리즘에 따라 권한 부여 서비스를 선택합니다. NTLMSSP, Kerberos 또는 Schannel을 인증 서비스로 사용하는 경우 RPC_C_AUTHZ_NONE 권한 부여 서비스로 사용해야 합니다.

[in] pServerPrincName

서버 보안 주체 이름입니다. COLE_DEFAULT_PRINCIPAL 지정되면 DCOM은 보안 담요 협상 알고리즘을 사용하여 주 이름을 선택합니다. Kerberos를 인증 서비스로 사용하는 경우 이 매개 변수는 서버의 올바른 보안 주체 이름이어야 합니다. 그렇지 않으면 호출이 실패합니다.

Schannel을 인증 서비스로 사용하는 경우 이 값은 보안 주체 이름에 설명된 msstd 또는 fullsic 양식 중 하나이거나 상호 인증을 원하지 않는 경우 NULL 이어야 합니다.

일반적으로 NULL 을 지정하면 프록시에서 서버 보안 주체 이름이 다시 설정되지 않고 이전 설정이 유지됩니다. 이전에 설정한 보안 주체 이름이 새로 선택한 인증 서비스에 유효하다는 보장은 없으므로 프록시에 대해 다른 인증 서비스를 선택할 때 NULLpServerPrincName 으로 사용할 때 주의해야 합니다.

[in] dwAuthnLevel

인증 수준입니다. 인증 수준 상수 목록에서 가져온 단일 값입니다. RPC_C_AUTHN_LEVEL_DEFAULT 지정된 경우 COM은 일반적인 보안 담요 협상 알고리즘에 따라 인증 수준을 선택합니다. 이 값이 RPC_C_AUTHN_LEVEL_NONE 설정되면 인증 서비스를 RPC_C_AUTHN_NONE 합니다. 각 인증 서비스는 지정된 인증 수준보다 더 높은 보안 인증 수준을 사용하도록 선택할 수 있습니다.

[in] dwImpLevel

가장 수준입니다. 가장 수준 상수 목록에서 가져온 단일 값입니다. RPC_C_IMP_LEVEL_DEFAULT 지정되면 COM은 일반적인 보안 담요 협상 알고리즘에 따라 가장 수준을 선택합니다. NTLMSSP를 원격으로 사용하는 경우 이 값은 RPC_C_IMP_LEVEL_IMPERSONATE 또는 RPC_C_IMP_LEVEL_IDENTIFY 합니다. 동일한 컴퓨터에서 NTLMSSP를 사용하는 경우 RPC_C_IMP_LEVEL_DELEGATE 지원됩니다. Kerberos의 경우 이 값은 RPC_C_IMP_LEVEL_IDENTIFY, RPC_C_IMP_LEVEL_IMPERSONATE 또는 RPC_C_IMP_LEVEL_DELEGATE 수 있습니다. Schannel의 경우 이 값은 RPC_C_IMP_LEVEL_IMPERSONATE 합니다.

[in] pAuthInfo

클라이언트의 ID를 나타내는 RPC_AUTH_IDENTITY_HANDLE 값입니다. 이 매개 변수는 동일한 컴퓨터의 호출에 사용되지 않습니다. pAuthInfoNULL인 경우 COM은 프로세스 토큰, 가장 토큰 또는 CoInitializeSecurity 함수의 인증 ID인 현재 프록시 ID를 사용합니다. 핸들이 NULL이 아닌 경우 해당 ID가 사용됩니다. 핸들에서 참조하는 구조체의 형식은 인증 서비스 공급자에 따라 달라집니다.

NTLMSSP 또는 Kerberos의 경우 구조체는 SEC_WINNT_AUTH_IDENTITY 또는 SEC_WINNT_AUTH_IDENTITY_EX 구조체입니다. 클라이언트가 CoQueryProxyBlanket을 호출하여 프록시에 설정된 자격 증명을 가져오는 경우 프록시에 다른 ID가 설정되거나 개체의 모든 프록시가 해제될 때까지 메모리가 유효하고 변경되지 않은 상태로 유지되도록 해야 합니다.

이 매개 변수가 NULL인 경우 COM은 현재 프록시 ID(프로세스 토큰 또는 가장 토큰)를 사용합니다. 핸들이 구조를 참조하는 경우 해당 ID가 사용됩니다.

Schannel의 경우 이 매개 변수는 클라이언트의 X.509 인증서를 포함하는 CERT_CONTEXT 구조에 대한 포인터이거나 클라이언트가 서버에 익명으로 연결하려는 경우 NULL 이어야 합니다. 인증서가 지정된 경우 호출자는 현재 아파트에 개체에 대한 프록시가 있는 한 인증서를 해제해서는 안 됩니다.

Snego의 경우 이 멤버는 NULL이거나 , SEC_WINNT_AUTH_IDENTITY 구조를 가리키거나, SEC_WINNT_AUTH_IDENTITY_EX 구조를 가리킵니다. NULL인 경우 Snego는 클라이언트 컴퓨터에서 사용할 수 있는 인증 서비스 목록을 선택합니다. SEC_WINNT_AUTH_IDENTITY_EX 구조를 가리키는 경우 구조체의 PackageList 멤버는 쉼표로 구분된 인증 서비스 이름 목록이 포함된 문자열을 가리킬 수 있어야 하며 PackageListLength 멤버는 PackageList 문자열의 바이트 수를 제공해야 합니다. PackageListNULL이면 Snego를 사용하는 모든 호출이 실패합니다.

COLE_DEFAULT_AUTHINFO 지정되면 COM은 일반적인 보안 담요 협상 알고리즘에 따라 인증 정보를 선택합니다.

pAuthInfo가 모두 설정되고 은폐 플래그 중 하나가 dwCapabilities로 설정된 경우 SetBlanket은 오류를 반환합니다.

[in] dwCapabilities

이 프록시의 기능입니다. 기능 플래그는 EOLE_AUTHENTICATION_CAPABILITIES 열거형에 정의됩니다. 이 메서드를 통해 설정할 수 있는 유일한 플래그는 EOAC_MUTUAL_AUTH, EOAC_STATIC_CLOAKING, EOAC_DYNAMIC_CLOAKING, EOAC_ANY_AUTHORITY(이 플래그는 사용되지 않음), EOAC_MAKE_FULLSIC 및 EOAC_DEFAULT. pAuthInfo가 설정되지 않고 Schannel이 인증 서비스가 아닌 경우 EOAC_STATIC_CLOAKING 또는 EOAC_DYNAMIC_CLOAKING 설정할 수 있습니다. 자세한 내용은 은폐를 참조하세요. 여기에 언급된 기능 플래그 이외의 기능 플래그가 표시되면 SetBlanket 에서 오류를 반환합니다.

반환 값

이 메서드는 다음 값을 반환할 수 있습니다.

반환 코드 Description
S_OK
메서드가 완료되었습니다.
E_INVALIDARG
하나 이상의 인수가 잘못되었습니다.

설명

SetBlanket 은 지정된 인터페이스 프록시에서 호출하는 데 사용할 인증 정보를 설정합니다. 여기에 지정된 값은 자동 보안에서 선택한 값을 재정의합니다. 이 메서드를 호출하면 지정된 프록시의 다른 모든 사용자에 대한 보안 값이 변경됩니다. 변경 내용을 프록시의 특정 instance만 적용하려면 IClientSecurity::CopyProxy를 호출하여 프록시의 프라이빗 복사본을 만들고 복사본에서 SetBlanket을 호출합니다.

이 메서드가 호출될 때마다 DCOM은 프록시에서 ID를 설정하고 이 프록시를 사용하여 수행된 이후 호출은 이 ID를 사용합니다. SetBlanket이 호출될 때 진행 중인 호출은 호출이 시작될 때 프록시에 대한 인증 정보를 사용합니다. pAuthInfoNULL인 경우 프록시 ID는 기본적으로 현재 프로세스 토큰으로 설정됩니다(CoInitializeSecurity 호출 시 인증 ID를 지정하지 않은 경우). pAuthInfoNULL일 때 은폐 플래그가 프록시에 미치는 영향을 알아보려면 은폐를 참조하세요.

기본적으로 COM은 클라이언트 및 서버 컴퓨터에서 사용 가능한 첫 번째 인증 서비스 및 권한 부여 서비스와 서버가 해당 인증 서비스에 등록한 주체 이름을 선택합니다. 현재 COM은 첫 번째 인증 서비스가 실패할 경우 다른 인증 서비스를 시도하지 않습니다.

SetBlanket에서 dwImpLevel의 기본 상수를 지정하면 매개 변수는 기본적으로 CoInitializeSecurity에 지정된 값으로 설정됩니다. CoInitializeSecurity가 호출되지 않으면 기본적으로 RPC_C_IMP_LEVEL_IDENTIFY.

프록시의 dwAuthnLevel에 대한 초기 값은 CoInitializeSecurity에 대한 클라이언트 호출 및 서버의 CoInitializeSecurity 호출에 설정된 값보다 높습니다. CoInitializeSecurity를 호출하지 않은 프로세스의 경우 기본 인증 수준이 RPC_C_AUTHN_CONNECT.

CoInitializeSecurity를 호출하지 않는 프로세스의 기본 인증 및 가장 수준은 DCOMCNFG를 사용하여 설정할 수 있습니다.

dwCapabilities에 대해 EOAC_DEFAULT 지정한 경우 CoInitializeSecurity의 유효한 기능이 사용됩니다. CoInitializeSecurity가 호출되지 않은 경우 기능 플래그에 EOAC_NONE 사용됩니다.

동일한 프록시의 두 스레드에서 SetBlanket 이 동시에 호출되는 경우 하나의 변경 내용 집합만 적용됩니다. SetBlanketCRpcOptions::Set이 동일한 프록시의 두 스레드에서 동시에 호출되는 경우 두 변경 내용이 모두 적용되거나 하나만 적용될 수 있습니다.

IClientSecurity 인터페이스와 같은 로컬 인터페이스에서는 보안 정보를 설정할 수 없습니다. 그러나 해당 인터페이스는 로컬에서만 지원되므로 보안이 필요하지 않습니다. IUnknownIMultiQI 는 특별한 경우입니다. 위치 구현은 이러한 인터페이스를 지원하기 위해 원격 호출을 합니다. SetBlanketIUnknown에 사용할 수 있습니다. IMultiQIIUnknown의 보안 설정을 사용합니다.

다른 매개 변수를 처리하지 않고 하나의 SetBlanket 매개 변수를 변경하려면 다른 매개 변수에 대한 기본 상수를 지정할 수 있습니다. 애플리케이션은 다른 모든 매개 변수를 기본 상수로 설정하여 매개 변수(예: 인증 수준)를 변경하고 인증 서비스를 포함한 다른 매개 변수를 무시할 수 있습니다.

기본값이 명확하지 않은 경우가 많으므로 사용하지 않는 모든 매개 변수를 기본 상수로 설정하는 것이 중요합니다. 특히 인증 서비스를 기본값으로 설정하는 경우 인증 정보 및 주체 이름을 기본값으로 설정해야 합니다. 그 이유는 두 가지입니다. 첫째, 인증 정보의 유형은 DCOM이 선택하는 인증 서비스에 따라 달라집니다. 둘째, DCOM이 특정 인증 서비스에 대해 몇 가지 복잡한 인증 정보를 전달해야 하므로 인증 서비스를 기본값으로 설정하고 인증 정보를 NULL로 설정하면 작동하지 않는 보안 설정이 표시될 수 있습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows 2000 Server [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 objidl.h(ObjIdl.h 포함)

추가 정보

CoQueryProxyBlanket

CoSetProxyBlanket

IClientSecurity