Megosztás a következőn keresztül:


Hitelesítő adatok kérése a felhasználótól

Előfordulhat, hogy az alkalmazásnak felhasználónevet és jelszóadatokat kell kérnie a felhasználótól, hogy elkerülje a rendszergazdai jelszó tárolását, vagy ellenőrizze, hogy a jogkivonat rendelkezik-e a megfelelő jogosultságokkal.

A hitelesítő adatok megadásának kérése azonban betanítsa a felhasználókat arra, hogy a képernyőn megjelenő véletlenszerű, azonosítatlan párbeszédpaneleken adja meg őket. A betanítási hatás csökkentéséhez az alábbi eljárást javasoljuk.

Felhasználói hitelesítő adatok megfelelő beszerzése

  1. Tájékoztassa a felhasználót, hogy egy egyértelműen az alkalmazás részét képező üzenet használatával egy párbeszédpanel jelenik meg, amely a felhasználó nevét és jelszavát kéri. A CredUIPromptForCredentials hívásának CREDUI_INFO struktúráját is használhatja az azonosító adatok vagy egy üzenet továbbításához.
  2. Hívja meg CredUIPromptForCredentials. Vegye figyelembe, hogy a felhasználónévhez és jelszóhoz megadott karakterek maximális száma magában foglalja a megszüntető null karaktert.
  3. A megfelelő hitelesítő adatok beszerzésének ellenőrzéséhez hívja meg a CredUIParseUserName és a CredUIConfirmCredentials függvényeket.

Az alábbi példa bemutatja, hogyan hívhatja meg CredUIPromptForCredentials, hogy a felhasználótól felhasználónevet és jelszót kérjen. Először egy CREDUI_INFO struktúrát kell kitöltenie az alkalmazandó kérésekkel kapcsolatos információkkal. Ezután a kód két puffert tölt ki nullákkal. Ezzel biztosíthatja, hogy a függvény ne adjon át olyan információt, amely egy régi felhasználónevet vagy jelszót jeleníthet meg a felhasználó számára. A CredUIPromptForCredentials meghívása előhozza a párbeszédpanelt. Biztonsági okokból ez a példa a CREDUI_FLAGS_DO_NOT_PERSIST jelzőt használja annak megakadályozására, hogy az operációs rendszer tárolja a jelszót, mert az esetleg elérhetővé válhat. Ha nincsenek hibák, CredUIPromptForCredentials kitölti a pszName és a pszPwd változókat, és nullát ad vissza. Ha az alkalmazás befejezte a hitelesítő adatok használatát, nullákat kell elhelyeznie a pufferekben, hogy megakadályozza az adatok véletlen felfedését.

CREDUI_INFO cui;
TCHAR pszName[CREDUI_MAX_USERNAME_LENGTH+1];
TCHAR pszPwd[CREDUI_MAX_PASSWORD_LENGTH+1];
BOOL fSave;
DWORD dwErr;
 
cui.cbSize = sizeof(CREDUI_INFO);
cui.hwndParent = NULL;
//  Ensure that MessageText and CaptionText identify what credentials
//  to use and which application requires them.
cui.pszMessageText = TEXT("Enter administrator account information");
cui.pszCaptionText = TEXT("CredUITest");
cui.hbmBanner = NULL;
fSave = FALSE;
SecureZeroMemory(pszName, sizeof(pszName));
SecureZeroMemory(pszPwd, sizeof(pszPwd));
dwErr = CredUIPromptForCredentials( 
    &cui,                         // CREDUI_INFO structure
    TEXT("TheServer"),            // Target for credentials
                                  //   (usually a server)
    NULL,                         // Reserved
    0,                            // Reason
    pszName,                      // User name
    CREDUI_MAX_USERNAME_LENGTH+1, // Max number of char for user name
    pszPwd,                       // Password
    CREDUI_MAX_PASSWORD_LENGTH+1, // Max number of char for password
    &fSave,                       // State of save check box
    CREDUI_FLAGS_GENERIC_CREDENTIALS |  // flags
    CREDUI_FLAGS_ALWAYS_SHOW_UI |
    CREDUI_FLAGS_DO_NOT_PERSIST);  

if(!dwErr)
{
    //  Put code that uses the credentials here.
 
    //  When you have finished using the credentials,
    //  erase them from memory.
    SecureZeroMemory(pszName, sizeof(pszName));
    SecureZeroMemory(pszPwd, sizeof(pszPwd));
}

CredUICmdLinePromptForCredentials

CREDUI_UINFO