c # - CredUIPromptForCredentials tvinge manuel valg af brugernavn

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger CredUIPromptForCredentials til at anmode brugeren om legitimationsoplysninger, som derefter sendes til en webservice. [5]


Prompten viser valgmuligheden 'Husk min adgangskode', så brugernavn og adgangskode kan udfyldes med tidligere anvendte værdier.


Når prompten vises og legitimationsoplysningerne er påfyldt, kan jeg ikke fortsætte, før jeg faktisk vælger brugernavnet fra rullemenuen.


Dette er den skærm, jeg ser:


Indtast billedbeskrivelse her


Hvis du klikker på OK, gør du intet andet end op med eksemplet tip, men hvis jeg manuelt vælger 'Greg' fra rullemenuen, kan jeg fortsætte.


Her er koden jeg 'm bruger:


StringBuilder userPassword = new StringBuilder(), userID = new StringBuilder();
CREDUI\_INFO credUI = new CREDUI\_INFO();
credUI.cbSize = Marshal.SizeOf(credUI);
bool save = true;
CREDUI\_FLAGS flags = CREDUI\_FLAGS.ALWAYS\_SHOW\_UI | CREDUI\_FLAGS.GENERIC\_CREDENTIALS 
                    | CREDUI\_FLAGS.SHOW\_SAVE\_CHECK\_BOX ;

//Display password prompt:
CredUIReturnCodes returnCode = CredUIPromptForCredentials
    (ref credUI, this.serverName, IntPtr.Zero, 0, userID, 100, userPassword, 100, ref save, flags);


OS er Windows 7 og Server 2008 r2.


Jeg har oprettet en komplet, men enkel prøveapplikation, der kan downloades fra https://docs.google.com/open?id=0BxSAZ9JlU2w9VHZWWFBjVEhTNG02N1Q4WkFrUkhDUQ til testning. [6]

Bedste reference


Jeg ville forsøge at svare på dit spørgsmål, men du løste det selv for hurtigt.


Når du læser dokumentationen på CredUIPromptForCredentials, bemærker jeg dog, at du anbefales at bruge CredUIPromptForWindowsCredentials på Windows 7 og Server 2008. [7] [8]


I Googling omkring fandt jeg dette fremragende gratis klassebibliotek, som indeholder wrappers til flere native API'er, herunder et komplet eksempel på at vise credential dialogboksen ved hjælp af CredUIPromptForWindowsCredentials API. [9]

Andre referencer 1


Indstilling af save = false løser problemet.


Afkrydsningsfeltet tjekkes ikke som standard, men hvis det er markeret, bliver adgangskoden gemt, så brugeren kan fortsætte uden at ændre indgangsværdier ved efterfølgende forsøg.

Andre referencer 2


Jeg tror, ​​du vil bare indstille brugerID: userID = new StringBuilder("Greg")


Der er en implementering af en wrapper i c # her: http://www.developerfusion.com/code/4693/using-the-credential-management-api/[10]


Du vil sandsynligvis have brugernavnet fra Environment.UserName.