Re: Authenticate user in OpenLDAP with username and password
- From: "Willy Denoyette [MVP]" <willy.denoyette@xxxxxxxxxx>
- Date: Fri, 5 Jan 2007 17:28:16 +0100
<dorrit.Riemenschneider@xxxxxxxxxxxxx> wrote in message news:1167996205.831349.92130@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
I need to validate a user with username and password against our
OpenLDAP active directory. This is my code:
Private bool ValidateUser (string username, string password)
{
DirectoryEntry userEntry = new DirectoryEntry(
ldapPath, username, password,
AuthenticationTypes.Anonymous);
//Bind to the native AdsObject to force authentication.
Object obj = userEntry.NativeObject;
DirectorySearcher search = new
DirectorySearcher(userEntry);
search.Filter = "(cn=" + username + ")";
search.PropertiesToLoad.Add("cn");
SearchResult result = search.FindOne();
if (result != null)
return true;
else
return false;
}
The problem is, it returns also true if the username is correct, but
the password is false.
It looks like the user is located but not authenthicated.
I have already tried with several AuthenthicationTypes:
I get an exeption "invalid dn-syntax" for AuthenthicationTypes.None,
AuthenthicationTypes.Delegation, AuthenthicationTypes.FastBind,
AuthenthicationTypes.ReadOnlyServer, AuthenthicationTypes.Sealing.
I get an exception "Die angeforderte Authentifizierungsmethode wird
durch den Server nicht unterstützt" (authenthication method not
supported by server) for AuthenthicationTypes.Secure or if I don't
specify an AuthenthicationType.
Any help is appreciated!
Dorrit
AuthenticationTypes.Anonymous means ... no authentication is performed, so your credentials are not checked at all. You should specify None as type, this will force Basic authentication, basically OpenLdap does only support "basic" and "SecureSocketsLayer", other types are not supported.
Another point is that you better use System.DirectoryServices.Protocols (FCL v2) when connecting to non Active Directory, OpenLDAP is not AD and the directory schema is not the same as the AD schema so you better use lower level LDAP API's then the ADSI (wrapped by SDS).
Following snip illustrates how you can bind using basic authentication.
using System.DirectoryServices.Protocols;
....
using (LdapConnection ldap = new LdapConnection("ldapserverName"))
{
ldap.AuthType = AuthType.Basic;
ldap.Bind(new NetworkCredential("username", "pwd")); // credentials for the bind, username in upn format
// do whatever you need to do with the store
SearchRequest req = new SearchRequest("cn=....", ....
....
}
Willy.
.
- Follow-Ups:
- Re: Authenticate user in OpenLDAP with username and password
- From: dorrit . Riemenschneider
- Re: Authenticate user in OpenLDAP with username and password
- References:
- Authenticate user in OpenLDAP with username and password
- From: dorrit . Riemenschneider
- Authenticate user in OpenLDAP with username and password
- Prev by Date: overloaded constructors
- Next by Date: Re: overloaded constructors
- Previous by thread: Re: Authenticate user in OpenLDAP with username and password
- Next by thread: Re: Authenticate user in OpenLDAP with username and password
- Index(es):
Relevant Pages
|