다음을 통해 공유


자격 증명 관리자 설정

네트워크 원본에 자격 증명을 제공하는 애플리케이션은 다음을 수행해야 합니다.

  1. IMFNetCredentialManager 인터페이스를 노출하는 자격 증명 관리자 개체를 구현합니다.
  2. 네트워크 원본을 만들기 전에 새 속성 저장소를 만듭니다.
  3. 속성 저장소에서 MFNETSOURCE_CREDENTIAL_MANAGER 속성을 설정합니다. 속성 값은 IMFNetCredentialManager 인터페이스에 대한 포인터입니다.
  4. 미디어 원본 구성에 설명된 대로 속성 저장소에 대한 포인터를 원본 확인자로 전달합니다.

네트워크 원본은 자격 증명 관리자를 사용하여 사용자 자격 증명을 가져옵니다. 네트워크 원본에 네트워크 리소스에 액세스하기 위해 자격 증명이 필요한 경우 애플리케이션의 IMFNetCredentialManager::BeginGetCredentials 메서드를 호출합니다. 이 호출은 사용자의 자격 증명을 가져오는 비동기 요청을 시작합니다. BeginGetCredentials 메서드는 자격 증명 캐시 또는 사용자로부터 자격 증명을 가져올 수 있습니다. 자격 증명은 자격 증명 개체에 저장됩니다. 작업이 완료되면 애플리케이션은 콜백 인터페이스를 호출하여 네트워크 원본에 알립니다. 네트워크 원본은 IMFNetCredentialManager::EndGetCredentials 를 호출하여 비동기 작업을 완료합니다.

비동기 작업이므로 애플리케이션은 작업이 끝날 때 콜백을 디스패치해야 합니다. 비동기 메서드 작성에 대한 단계별 지침은 비동기 메서드 작성을 참조하세요.

다음 예제에서는 네트워크 원본에서 MFNETSOURCE_CREDENTIAL_MANAGER 속성을 설정하는 방법을 보여줍니다.

// Creates a media source from a URL.
//
// Demonstrates how to set a credential manager on the network source.

HRESULT CreateMediaSourceWithCredentialManager(
    PCWSTR pszURL, 
    IMFMediaSource **ppSource
    )
{
    IPropertyStore *pConfig = NULL;

    CCredentialManager *pCredentials = new (std::nothrow) CCredentialManager();

    if (pCredentials == NULL)
    {
        return E_OUTOFMEMORY;
    }

    // Configure the property store.
    HRESULT hr = PSCreateMemoryPropertyStore(IID_PPV_ARGS(&pConfig));

    if (SUCCEEDED(hr))
    {
        PROPERTYKEY key;
        key.fmtid =  MFNETSOURCE_CREDENTIAL_MANAGER;
        key.pid = 0;

        PROPVARIANT var;
        var.vt = VT_UNKNOWN;
        pCredentials->QueryInterface(IID_PPV_ARGS(&var.punkVal));

        hr = pConfig->SetValue(key, var);

        PropVariantClear(&var);
    }

    // Create the source media source.
    if (SUCCEEDED(hr))
    {
        hr = CreateMediaSource(pszURL, pConfig, ppSource);
    }

    SafeRelease(&pConfig);
    SafeRelease(&pCredentials);

    return hr;
}

네트워크 원본 인증