Autoryzacja użytkownika w C##

Czasami potrzebujemy fragmentu kodu, który umożliwi autoryzację użytkownika, który ma zablokowane konto - np. wtedy, kiedy loguje się do portalu typu self-service i chciałby sprawdzić, dlaczego ma zablokowane konto.

Przy próbie bindowania do AD extended error widzi rozróżnienie między kontem z zalokowanym, zablokowanym i złym hasłem. Niestety, tego błędu nie zobaczymy, jeśli użyjemy klas DirectoryServices czy ADSI - oba te interfejsy próbują się bindować dopiero przy podłączeniu do określonego obiektu i wyrzucają błąd PermissionDenied. Można oczywiście użyć klas novella do obslugi AD, ale niestety pod Windowsem nie wspierają TLS-a przy dostepie do LDAP-a.
Można tez użyc interopa i dllki advapi32.dll, co jest pokazane poniżej:

using System.Runtime.InteropServices;
(..)// w klasie
[DllImport("advapi32.dll", CharSet = CharSet.Auto,SetLastError=true)]
public static extern bool LogonUser(String lpszUserName,
String lpszDomain,
String lpszPassword,
int dwLogonType,
int dwLogonProvider,
ref IntPtr phToken);

public const int LOGON32_LOGON_INTERACTIVE = 2;
public const int LOGON32_PROVIDER_DEFAULT = 0;
public const int LOGON32_LOGON_NETWORK = 3;
(..) // i w kodzie
IntPtr token = IntPtr.Zero;
bool res = LogonUser(
textBoxUserName.Text,
textBoxDomainName.Text,
textBoxPassword.Text,
LOGON32_LOGON_NETWORK,
LOGON32_PROVIDER_DEFAULT,
ref token);
label1.Text= Marshal.GetLastWin32Error().ToString()+" : "+res.ToString();

Marshal.GetLastWin32Error() powinien nam zwrócić różne kody błędu przy różnych próbach dostępu do AD.

Tuesday, May 15, 2007 4:14:33 PM (Central European Standard Time, UTC+01:00) #    Comments [0]  |  Trackback Tracked by:
"levitra generic Acheter mastercard" (levitra generic Acheter mastercard) [Trackback]
"buy drugs online mastercard" (buy drugs online mastercard) [Trackback]

 

All content © 2009, Krzysztof Pietrzak
On this page
This site
Calendar
<January 2009>
SunMonTueWedThuFriSat
28293031123
45678910
11121314151617
18192021222324
25262728293031
1234567
Archives
Sitemap
Blogroll OPML
  Tokyo by night
blog WiTa
  W-Files
blog n€x¤Ra
 .:fotoblog:.
blog Kfaza
 \\archon\blog$
blog archona
 Czasowstrzymywacz
Blog Fookyego
 Jog Pstryka
Jog Pstryka
 Mac OS X vs. Active Directory
techniczny blog kfaza

Maps
Locations of visitors to this page