Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 |