LDAP Auth Problem - COM interop

C

Chris Davoli

Environment: Win XP, VS2003, Active Directory
I'm trying to use LDAP to authenticate users. I used article
http://support.microsoft.com/?id=326340
How to authenticate against the Active Directory by using forms
authentication and Visual Basic .NET, but am having a COM interop error when
I do the IsAuthenticated try to create an object entry.NativeObject ie; Dim
obj As Object = entry.NativeObject

The COM interop error is <error: an exception of type:
{System.Runtime.InteropServices.COMException} occurred>

I'm thinking that there is some kind of COM component that is either not
registered, or not there.

Can anyone help me?

Here is the code:

Public Function IsAuthenticated(ByVal domain As String, ByVal
username As String, ByVal pwd As String) As Boolean

Dim domainAndUsername As String = domain & "\" & username
Dim entry As DirectoryEntry = New DirectoryEntry(_path,
domainAndUsername, pwd)

Try
'Bind to the native AdsObject to force authentication.
Dim obj As Object = entry.NativeObject
Dim search As DirectorySearcher = New DirectorySearcher(entry)

search.Filter = "(SAMAccountName=" & username & ")"
search.PropertiesToLoad.Add("cn")
Dim result As SearchResult = search.FindOne()

If (result Is Nothing) Then
Return False
End If

'Update the new path to the user in the directory.
_path = result.Path
_filterAttribute = CType(result.Properties("cn")(0), String)

Catch ex As Exception
Throw New Exception("Error authenticating user. " &
ex.Message)
End Try

Return True
End Function
 
J

Joe Kaplan

There should be more details of the COM error in the stack trace. Can you
provide that? Also, that sample from MS kind of sucks. We have a much
better one in our book (IMO) in ch 12. Ch 12 isn't the free chapter from
the website, but the code samples are there for download.

LDAP auth is a thorny problem that can get you into trouble. Are you sure
you need to do it this way? Also, can you use the .NET 2.0
ActiveDirectoryMembershipProvider instead?

Joe K.
 
C

Chris Davoli

Joe,
below is the error. Is there anything you can think of?

Also, I am going to buy the book this weekend.

Can I download these samples from chapter 12?

What is this .Net 2.0 ActiveDirectoryMembershipProvider? Where can I find
some info on it?

Chris


Server Error in '/FormsAuthAd' Application.
--------------------------------------------------------------------------------

Error authenticating user. The requested authentication method is not
supported by the server
Description: An unhandled exception occurred during the execution of the
current web request. Please review the stack trace for more information about
the error and where it originated in the code.

Exception Details: System.Exception: Error authenticating user. The
requested authentication method is not supported by the server

Source Error:


Line 38:
Line 39: Catch ex As Exception
Line 40: Throw New Exception("Error authenticating user. " &
ex.Message)
Line 41: End Try
Line 42:


Source File: C:\Inetpub\wwwroot\FormsAuthAd\LdapAuthentication.vb Line: 40

Stack Trace:


[Exception: Error authenticating user. The requested authentication method
is not supported by the server]
FormsAuthAd.FormsAuth.LdapAuthentication.IsAuthenticated(String domain,
String username, String pwd) in
C:\Inetpub\wwwroot\FormsAuthAd\LdapAuthentication.vb:40
ASP.Logon_aspx.Login_Click(Object sender, EventArgs e) in
c:\inetpub\wwwroot\FormsAuthAd\logon.aspx:21
System.Web.UI.WebControls.Button.OnClick(EventArgs e)

System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler
sourceControl, String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain() +1292




--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:1.1.4322.2032; ASP.NET
Version:1.1.4322.2032


--
Chris Davoli



Joe Kaplan said:
There should be more details of the COM error in the stack trace. Can you
provide that? Also, that sample from MS kind of sucks. We have a much
better one in our book (IMO) in ch 12. Ch 12 isn't the free chapter from
the website, but the code samples are there for download.

LDAP auth is a thorny problem that can get you into trouble. Are you sure
you need to do it this way? Also, can you use the .NET 2.0
ActiveDirectoryMembershipProvider instead?

Joe K.
 
C

Chris Davoli

Actually here is the error message...

Server Error in '/FormsAuthAd' Application.
--------------------------------------------------------------------------------

The requested authentication method is not supported by the server
Description: An unhandled exception occurred during the execution of the
current web request. Please review the stack trace for more information about
the error and where it originated in the code.

Exception Details: System.Runtime.InteropServices.COMException: The
requested authentication method is not supported by the server

Source Error:


Line 22: 'Try
Line 23: 'Bind to the native AdsObject to force authentication.
Line 24: Dim obj As Object = entry.NativeObject
Line 25: Dim search As DirectorySearcher = New
DirectorySearcher(entry)
Line 26:


Source File: C:\Inetpub\wwwroot\FormsAuthAd\LdapAuthentication.vb Line: 24

Stack Trace:


[COMException (0x80072027): The requested authentication method is not
supported by the server]
System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
System.DirectoryServices.DirectoryEntry.Bind()
System.DirectoryServices.DirectoryEntry.get_NativeObject()
FormsAuthAd.FormsAuth.LdapAuthentication.IsAuthenticated(String domain,
String username, String pwd) in
C:\Inetpub\wwwroot\FormsAuthAd\LdapAuthentication.vb:24
ASP.Logon_aspx.Login_Click(Object sender, EventArgs e) in
c:\inetpub\wwwroot\FormsAuthAd\logon.aspx:21
System.Web.UI.WebControls.Button.OnClick(EventArgs e)

System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler
sourceControl, String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain() +1292




--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:1.1.4322.2032; ASP.NET
Version:1.1.4322.2032
--
Chris Davoli



Chris Davoli said:
Joe,
below is the error. Is there anything you can think of?

Also, I am going to buy the book this weekend.

Can I download these samples from chapter 12?

What is this .Net 2.0 ActiveDirectoryMembershipProvider? Where can I find
some info on it?

Chris


Server Error in '/FormsAuthAd' Application.
--------------------------------------------------------------------------------

Error authenticating user. The requested authentication method is not
supported by the server
Description: An unhandled exception occurred during the execution of the
current web request. Please review the stack trace for more information about
the error and where it originated in the code.

Exception Details: System.Exception: Error authenticating user. The
requested authentication method is not supported by the server

Source Error:


Line 38:
Line 39: Catch ex As Exception
Line 40: Throw New Exception("Error authenticating user. " &
ex.Message)
Line 41: End Try
Line 42:


Source File: C:\Inetpub\wwwroot\FormsAuthAd\LdapAuthentication.vb Line: 40

Stack Trace:


[Exception: Error authenticating user. The requested authentication method
is not supported by the server]
FormsAuthAd.FormsAuth.LdapAuthentication.IsAuthenticated(String domain,
String username, String pwd) in
C:\Inetpub\wwwroot\FormsAuthAd\LdapAuthentication.vb:40
ASP.Logon_aspx.Login_Click(Object sender, EventArgs e) in
c:\inetpub\wwwroot\FormsAuthAd\logon.aspx:21
System.Web.UI.WebControls.Button.OnClick(EventArgs e)

System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler
sourceControl, String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain() +1292
 
J

Joe Kaplan

That's actually a fairly interesting error (authentication method is not
supported) and sounds like it could be a weird environment problem. For
starters, I'd suggest adding "AuthenticationTypes.Secure" into the 4th
parameter on your DirectoryEntry constructor to see if that changes
anything. It sounds like there may be an environment issue preventing the
use of Kerberos or NTLM. It is pretty hard to say and may require doing
network sniffs to find out. Ick.

The membership APIs in ASP.NET 2.0 are a new abstraction layer that help
with the implementation of forms-based authentication and user management
(creation, password reset, etc.). They use a provider model so that
different backends like SQL and AD can be plugged in. It is also fully
customizable, so you can roll your own. The AD implementation has a pretty
strong implementation of its authentication scheme.

There is so much info out there about the membership stuff that I hesitate
to start to recommend anything, but Google is your friend. :) If ASP.NET
2.0 is available to you, I think you should really be looking at this rather
than rolling your own forms auth.

Joe K.

--
Joe Kaplan-MS MVP Directory Services Programming
Co-author of "The .NET Developer's Guide to Directory Services Programming"
http://www.directoryprogramming.net
--
Chris Davoli said:
Actually here is the error message...

Server Error in '/FormsAuthAd' Application.
--------------------------------------------------------------------------------

The requested authentication method is not supported by the server
Description: An unhandled exception occurred during the execution of the
current web request. Please review the stack trace for more information
about
the error and where it originated in the code.

Exception Details: System.Runtime.InteropServices.COMException: The
requested authentication method is not supported by the server

Source Error:


Line 22: 'Try
Line 23: 'Bind to the native AdsObject to force
authentication.
Line 24: Dim obj As Object = entry.NativeObject
Line 25: Dim search As DirectorySearcher = New
DirectorySearcher(entry)
Line 26:


Source File: C:\Inetpub\wwwroot\FormsAuthAd\LdapAuthentication.vb Line:
24

Stack Trace:


[COMException (0x80072027): The requested authentication method is not
supported by the server]
System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
System.DirectoryServices.DirectoryEntry.Bind()
System.DirectoryServices.DirectoryEntry.get_NativeObject()
FormsAuthAd.FormsAuth.LdapAuthentication.IsAuthenticated(String domain,
String username, String pwd) in
C:\Inetpub\wwwroot\FormsAuthAd\LdapAuthentication.vb:24
ASP.Logon_aspx.Login_Click(Object sender, EventArgs e) in
c:\inetpub\wwwroot\FormsAuthAd\logon.aspx:21
System.Web.UI.WebControls.Button.OnClick(EventArgs e)

System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String
eventArgument)
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler
sourceControl, String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain() +1292




--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:1.1.4322.2032;
ASP.NET
Version:1.1.4322.2032
--
Chris Davoli



Chris Davoli said:
Joe,
below is the error. Is there anything you can think of?

Also, I am going to buy the book this weekend.

Can I download these samples from chapter 12?

What is this .Net 2.0 ActiveDirectoryMembershipProvider? Where can I find
some info on it?

Chris


Server Error in '/FormsAuthAd' Application.
--------------------------------------------------------------------------------

Error authenticating user. The requested authentication method is not
supported by the server
Description: An unhandled exception occurred during the execution of the
current web request. Please review the stack trace for more information
about
the error and where it originated in the code.

Exception Details: System.Exception: Error authenticating user. The
requested authentication method is not supported by the server

Source Error:


Line 38:
Line 39: Catch ex As Exception
Line 40: Throw New Exception("Error authenticating user.
" &
ex.Message)
Line 41: End Try
Line 42:


Source File: C:\Inetpub\wwwroot\FormsAuthAd\LdapAuthentication.vb
Line: 40

Stack Trace:


[Exception: Error authenticating user. The requested authentication
method
is not supported by the server]
FormsAuthAd.FormsAuth.LdapAuthentication.IsAuthenticated(String
domain,
String username, String pwd) in
C:\Inetpub\wwwroot\FormsAuthAd\LdapAuthentication.vb:40
ASP.Logon_aspx.Login_Click(Object sender, EventArgs e) in
c:\inetpub\wwwroot\FormsAuthAd\logon.aspx:21
System.Web.UI.WebControls.Button.OnClick(EventArgs e)

System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String
eventArgument)
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler
sourceControl, String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain() +1292




--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:1.1.4322.2032;
ASP.NET
Version:1.1.4322.2032


--
Chris Davoli



Joe Kaplan said:
There should be more details of the COM error in the stack trace. Can
you
provide that? Also, that sample from MS kind of sucks. We have a much
better one in our book (IMO) in ch 12. Ch 12 isn't the free chapter
from
the website, but the code samples are there for download.

LDAP auth is a thorny problem that can get you into trouble. Are you
sure
you need to do it this way? Also, can you use the .NET 2.0
ActiveDirectoryMembershipProvider instead?

Joe K.

--
Joe Kaplan-MS MVP Directory Services Programming
Co-author of "The .NET Developer's Guide to Directory Services
Programming"
http://www.directoryprogramming.net
--
Environment: Win XP, VS2003, Active Directory
I'm trying to use LDAP to authenticate users. I used article
http://support.microsoft.com/?id=326340
How to authenticate against the Active Directory by using forms
authentication and Visual Basic .NET, but am having a COM interop
error
when
I do the IsAuthenticated try to create an object entry.NativeObject
ie;
Dim
obj As Object = entry.NativeObject

The COM interop error is <error: an exception of type:
{System.Runtime.InteropServices.COMException} occurred>

I'm thinking that there is some kind of COM component that is either
not
registered, or not there.

Can anyone help me?

Here is the code:

Public Function IsAuthenticated(ByVal domain As String, ByVal
username As String, ByVal pwd As String) As Boolean

Dim domainAndUsername As String = domain & "\" & username
Dim entry As DirectoryEntry = New DirectoryEntry(_path,
domainAndUsername, pwd)

Try
'Bind to the native AdsObject to force authentication.
Dim obj As Object = entry.NativeObject
Dim search As DirectorySearcher = New
DirectorySearcher(entry)

search.Filter = "(SAMAccountName=" & username & ")"
search.PropertiesToLoad.Add("cn")
Dim result As SearchResult = search.FindOne()

If (result Is Nothing) Then
Return False
End If

'Update the new path to the user in the directory.
_path = result.Path
_filterAttribute = CType(result.Properties("cn")(0),
String)

Catch ex As Exception
Throw New Exception("Error authenticating user. " &
ex.Message)
End Try

Return True
End Function
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,581
Members
45,056
Latest member
GlycogenSupporthealth

Latest Threads

Top