Freigeben über


ICcgDomainAuthCredentials::GetPasswordCredentials-Methode (ccgplugins.h)

Gibt Anmeldeinformationen zur Authentifizierung eines nicht domänenverbundenen Containers mit Active Directory zurück.

Syntax

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

Die Parameter

pluginInput

Eine von der Containerlaufzeit übergebene Eingabezeichenfolge. Die Clientimplementierung verwendet die bereitgestellte Eingabezeichenfolge zum Abrufen von Authentifizierungsanmeldeinformationen, in der Regel von einem sicheren Speicheranbieter, die in den Ausgabeparametern zurückgegeben werden. Die Eingabezeichenfolge wird für die Host Compute Services (HCS) in einer Spezifikationsdatei für Anmeldeinformationen bereitgestellt. Weitere Informationen finden Sie im Abschnitt "Hinweise ".

domainName

Der Domänenname für die Anmeldeinformationen

username

Der Benutzername für die Anmeldeinformationen.

password

Das Kennwort für die Anmeldeinformationen.

Rückgabewert

Der Rückgabewert ist ein HRESULT. Ein Wert von S_OK gibt an, dass der Aufruf erfolgreich war.

Bemerkungen

Die API kann gleichzeitig aufgerufen werden. Daher muss der Entwickler sicherstellen, dass seine Implementierung threadsicher ist. Darüber hinaus wird das COM-Objekt out-of-proc aktiviert und muss entsprechend registriert werden.

Der Implementierer muss einen Schlüssel unter "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CCG\COMClasses" für die COM-CLSID hinzufügen. Schreibzugriff auf "CCG\COMClasses" ist auf SYSTEM- und Administratorkonten beschränkt.

Nachfolgend sehen Sie eine Beispieldatei für die Spezifikation der Anmeldeinformationen. Informationen zum Bereitstellen dieser Datei an Docker finden Sie unter Ausführen eines Containers mit einem 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>"
        }
    }
}

Examples

Das folgende Beispiel zeigt eine einfache Implementierung von ICcgDomainAuthCredentials. Beachten Sie, dass dieses Beispiel zu Veranschaulichungszwecken die Anmeldeinformationen abruft, indem einfach die Eingabezeichenfolge analysiert wird. Eine reale Implementierung würde die Anmeldeinformationen in einem sicheren Datenspeicher speichern und die Eingabezeichenfolge verwenden, um die Anmeldeinformationen zu finden. Außerdem wurden die standardmäßigen COM-Methodenimplementierungen aus diesem Beispiel aus Platzgründen weggelassen.

// 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);

Anforderungen

Anforderung Wert
Mindestens unterstützter Client Windows 10 Build 20348
mindestens unterstützte Server- Windows 10 Build 20348
Header ccgplugins.h

Siehe auch

ICcgDomainAuthCredentials