ICcgDomainAuthCredentials::GetPasswordCredentials-Methode (ccgplugins.h)
Gibt Anmeldeinformationen zurück, um einen Nicht-Domänenbeigetretenen Container mit Active Directory zu authentifizieren.
Syntax
HRESULT GetPasswordCredentials(
LPCWSTR pluginInput,
LPWSTR *domainName,
LPWSTR *username,
LPWSTR *password
);
Parameter
pluginInput
Eine von der Containerruntime übergebene Eingabezeichenfolge. Die Clientimplementierung verwendet die bereitgestellte Eingabezeichenfolge zum Abrufen von Anmeldeinformationen für die Authentifizierung, in der Regel von einem sicheren Speicheranbieter, die in den Ausgabeparametern zurückgegeben werden. Die Eingabezeichenfolge wird dem Host Compute Services (HCS) in einer Anmeldeinformationsspezifikationsdatei 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. Der Wert S_OK gibt an, dass der Aufruf erfolgreich war.
Hinweise
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 seine COM-CLSID hinzufügen. Der Schreibzugriff auf "CCG\COMClasses" ist auf SYSTEM- und Administratorkonten beschränkt.
Im Folgenden finden Sie eine Beispieldatei zur Spezifikation von Anmeldeinformationen. Informationen zum Bereitstellen dieser Datei für 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>"
}
}
}
Beispiele
Das folgende Beispiel zeigt eine einfache Implementierung von ICcgDomainAuthCredentials. Beachten Sie, dass dieses Beispiel zur Veranschaulichung die Anmeldeinformationen erhält, 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 suchen. Außerdem wurden die Implementierungen der COM-Standardmethode in diesem Beispiel aus Gründen der Kürze 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 |
---|---|
Unterstützte Mindestversion (Client) | Windows 10 Build 20348 |
Unterstützte Mindestversion (Server) | Windows 10 Build 20348 |
Kopfzeile | ccgplugins.h |