Žádost uživatele o přihlašovací údaje
Vaše aplikace může potřebovat vyzvat uživatele k zadání uživatelského jména a hesla, aby se zabránilo uložení hesla správce nebo ověření, že token obsahuje příslušná oprávnění.
Pokud však uživatele pouze vyzýváme k zadání přihlašovacích údajů, může je to naučit dodávat je do jakéhokoli náhodného, neidentifikovaného dialogového okna, které se objeví na obrazovce. Následující postup se doporučuje pro zmírnění tréninkového efektu.
Správné získání přihlašovacích údajů uživatele
- Informujte uživatele pomocí zprávy, která je jasně součástí vaší aplikace, že uvidí dialogové okno, které požádá o své uživatelské jméno a heslo. Na volání funkce CredUIPromptForCredentials můžete také použít strukturu CREDUI_INFO k předání identifikačních dat nebo zprávy.
- Volání CredUIPromptForCredentials. Všimněte si, že maximální počet znaků zadaných pro uživatelské jméno a heslo zahrnuje ukončující znak null.
- Pro zavedení příslušných přihlašovacích údajů použijte volání CredUIParseUserName a CredUIConfirmCredentials k ověření jejich platnosti.
Následující příklad ukazuje, jak volat CredUIPromptForCredentials, aby požádal uživatele o uživatelské jméno a heslo. Začíná vyplněním struktury CREDUI_INFO informacemi o tom, jaké výzvy použít. V dalším kroku kód vyplní dvě vyrovnávací paměti nulami. Tím se zajistí, že funkce nepředá žádné informace, které by mohly odhalit staré uživatelské jméno nebo heslo uživateli. Volání CredUIPromptForCredentials zobrazí dialogové okno. Z bezpečnostních důvodů tento příklad používá příznak CREDUI_FLAGS_DO_NOT_PERSIST, aby se zabránilo operačnímu systému uložit heslo, protože by pak mohlo být vystaveno riziku. Pokud nedojde k žádným chybám, CredUIPromptForCredentials vyplní proměnné pszName a pszPwd a vrátí nulu. Jakmile aplikace dokončí používání přihlašovacích údajů, měla by do vyrovnávací paměti umístit nuly, aby se informace nechtěně odhalily.
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));
}
Související témata