다음을 통해 공유


ICcgDomainAuthCredentials::GetPasswordCredentials 메서드(ccgplugins.h)

Active Directory를 사용하여 도메인에 가입되지 않은 컨테이너를 인증하는 자격 증명을 반환합니다.

구문

HRESULT GetPasswordCredentials(
  LPCWSTR pluginInput,
  LPWSTR  *domainName,
  LPWSTR  *username,
  LPWSTR  *password
);

매개 변수

pluginInput

컨테이너 런타임에서 전달된 입력 문자열입니다. 클라이언트 구현은 제공된 입력 문자열을 사용하여 일반적으로 출력 매개 변수에 반환되는 보안 스토리지 공급자에서 인증 자격 증명을 검색합니다. 입력 문자열은 자격 증명 사양 파일의 HCS(Host Compute Services)에 제공됩니다. 자세한 내용은 설명 섹션을 참조하세요.

domainName

자격 증명의 도메인 이름

username

자격 증명의 사용자 이름입니다.

password

자격 증명의 암호입니다.

반환 값

반환 값은 HRESULT입니다. S_OK 값은 호출이 성공했음을 나타냅니다.

설명

API는 동시에 호출될 수 있습니다. 따라서 개발자는 해당 구현이 스레드로부터 안전한지 확인해야 합니다. 또한 COM 개체는 out-of-proc로 활성화되며 적절하게 등록되어야 합니다.

구현자는 COM CLSID에 대한 "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CCG\COMClasses" 아래에 키를 추가해야 합니다. "CCG\COMClasses"에 대한 쓰기 액세스는 SYSTEM 및 관리자 계정으로 제한됩니다.

다음은 자격 증명 사양 파일의 예입니다. Docker에 이 파일을 제공하는 방법에 대한 자세한 내용은 gMSA를 사용하여 컨테이너 실행을 참조하세요.

{
    "CmsPlugins": [
        "ActiveDirectory"
    ],
    "DomainJoinConfig": {
        "Sid": "S-1-5-21-3700119848-2853083131-2094573802",
        "MachineAccountName": "gmsa1",
        "Guid": "630a7dd3-2d3e-4471-ae91-1d9ea2556cd5",
        "DnsTreeName": "contoso.com",
        "DnsName": "contoso.com",
        "NetBiosName": "CONTOSO"
    },
    "ActiveDirectoryConfig": {
        "GroupManagedServiceAccounts": [
            {
                "Name": "gmsa1",
                "Scope": "contoso.com"
            },
            {
                "Name": "gmsa1",
                "Scope": "CONTOSO"
            }
        ],
        "HostAccountConfig": {
            "PortableCcgVersion": "1",
            "PluginGUID": "{CFCA0441-511D-4B2A-862E-20348A78760B}",
            "PluginInput": "contoso.com:gmsaccg:<password>"
        }
    }
}

예제

다음 예제에서는 ICcgDomainAuthCredentials의 간단한 구현을 보여 줍니다. 설명을 위해 이 샘플은 입력 문자열을 구문 분석하기만 하면 자격 증명을 가져옵니다. 실제 구현은 보안 데이터 저장소에 자격 증명을 저장하고 입력 문자열을 사용하여 자격 증명 정보를 찾습니다. 또한 간결성을 위해 이 샘플에서 표준 COM 메서드 구현을 생략했습니다.

// UUID generated by the developer
[uuid("cfca0441-511d-4b2a-862e-20348a78760b")] 
class CCGStubPlugin : public RuntimeClass<RuntimeClassFlags<RuntimeClassType::ClassicCom>, ICcgDomainAuthCredentials >
{
   public:
    CCGStubPlugin() {}

    ~CCGStubPlugin() {}

    IFACEMETHODIMP GetPasswordCredentials(
        _In_ LPCWSTR pluginInput,
        _Outptr_ LPWSTR *domainName,
        _Outptr_ LPWSTR *username,
        _Outptr_ LPWSTR *password)
    {
        std::wstring domainParsed, userParsed, passwordParsed; 
        try
        {
            if(domainName == NULL || username == NULL || password == NULL)
            {
                return STG_E_INVALIDPARAMETER;
            }
            *domainName = NULL;
            *username = NULL;
            *password = NULL;
            wstring pluginInputString(pluginInput);
            if (count(pluginInputString.begin(), pluginInputString.end(), ':') < 2)
            {
                return CO_E_NOT_SUPPORTED;
            }
            // Extract creds of this format Domain:Username:Password
            size_t sep1 = pluginInputString.find(L":");
            size_t sep2 = pluginInputString.find(L":", sep1 + 1);
            domainParsed = pluginInputString.substr(0, sep1);
            userParsed = pluginInputString.substr(sep1 + 1, sep2 - sep1 - 1);
            passwordParsed = pluginInputString.substr(sep2 + 1);
        }
        catch (...)
        {
            return EVENT_E_INTERNALERROR;
        }

        auto userCo = wil::make_cotaskmem_string_nothrow(userParsed.c_str());
        auto passwordCo = wil::make_cotaskmem_string_nothrow(passwordParsed.c_str());
        auto domainCo = wil::make_cotaskmem_string_nothrow(domainParsed.c_str());
        if (userCo == nullptr || passwordCo == nullptr || domainCo == nullptr)
        {
            return STG_E_INSUFFICIENTMEMORY;
        }

        *domainName = domainCo.release();
        *username = userCo.release();
        *password = passwordCo.release();
        return S_OK;
    }
};
CoCreatableClass(CCGStubPlugin);

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10 빌드 20348
지원되는 최소 서버 Windows 10 빌드 20348
머리글 ccgplugins.h

추가 정보

ICcgDomainAuthCredentials