2009-05-14 13 views
1

ADAMインスタンスをセットアップしてテストユーザーを追加しました。私はWindowsアカウントを使用してADAMにバインドできますが、ADAMユーザーのいずれかを使用してバインドすることはできません。 (私は正常にldpのadamユーザーをバインドできます)& msDS-UserAccountDisabled属性をfalseに設定して、ユーザーが有効になっていることを確認しました。C#からADAMに対してADAMユーザーを認証する - バインドできません

エラー:システム 私は私の窓に結合し、私は成功し、私はエラーを取得する&は、ADAMユーザーのプロパティを戻すが、私がしようとしたとき、私はまだ、それらを認証するために苦労していますし、ADAMユーザーアカウントにバインドする検索することができますアカウント.Runtime.InteropServices.COMException(0x8007052E):ログオンに失敗しました:不明なユーザー名またはパスワードが間違っています。 System.DirectoryServices.DirectoryEntry.Bind(ブールthrowIfFail)

でここで私が使用していますコードです:任意の助けを事前に

string userName = txtUserName.Text; 
string password = txtPassword.Text; 
string ADConnectionString = "LDAP://localhost:389/CN=sandbox,DC=ITOrg"; 
DirectoryEntry entry = new DirectoryEntry(ADConnectionString); 

entry.Username = "myComputer\\Administrator"; 
entry.Password = "myPassword"; 
try 
{ 
DirectorySearcher searcher = new DirectorySearcher(entry); 
searcher.Filter = "(&(objectClass=user)(CN=" + userName + "))"; 
SearchResultCollection result = searcher.FindAll(); 
if (result.Count > 0) 
{ 
    //bind with simple bind 
    using (DirectoryEntry de = new DirectoryEntry(result[0].Path, userName, password,AuthenticationTypes.None)) 
    { 
     if (de.Guid != null) // this is the line where it dies 
     { 
       Label1.Text = "Successfully authenticated"; 
       Label2.Text = result[0].Properties["displayName"][0].ToString(); 
       Label3.Text = result[0].Properties["telephoneNumber"][0].ToString(); 
      } else 
      { 
      Lable1.Text = "Unable to Authenticate"; 
      } 
    } 
} 
else 
{ 
    Lable1.Text = "UserName :" + userName + " not found"; 
} 
} catch(Exception ex) 
{ 
    Label1.Text = "Error searching: " + ex.ToString(); 
} 

おかげで、感謝!

答えて

6

おそらくユーザ名のフォーマットの問題です。 SDSでADAMユーザーを認証する場合は、LDAP単純バインドを使用し、ADAMでサポートされている名前形式を使用する必要があります。 ADAMでは技術的にDigest認証も使用できますが、SDS(SDS.Protocolsのみ)では利用できないため、コードアプローチには該当しません。

あなたはAuthenticationTypes.Noneが設定されているので、単純なバインドを使用しています。間違っている可能性のある部分は、ユーザー名形式です。

ADAMは、ユーザーの完全なDN、displayName(設定されたユニークの場合)、および/またはuserPrincipalName(設定されたユニークの場合)をバインド可能なユーザー名として受け入れるため、働くその場合は、他のユーザー名の値も試すことができます。 displayNameまたはuserPrincipalNameに必要なものはすべてADAMに入れることができます。検証はありません。値が一意であることを確認してください。

実際にADAMに対していくつかの種類のバインド認証を行いたい場合は、.NET 3.5のPrincipalContextのValidateCredentialsメソッドを使用して、より良いperfとscaleを取得します。

この種類のものはフォーラムで常に文書化されており、フォーラムでは常にhttp://www.directoryprogramming.netで議論されており、私のサイトであるため頻繁に頻繁に使用されています。 :)友人が私にこの記事を読んだり、私はそれを見たことがないだろう。

+0

Stackoverflowへようこそ、Joe!すべてのADAMとActive Directoryの照会担当者は、こちらの質問に目を留めていることを知ってうれしいです! ;-) –

+0

私は同じ問題があります。ユーザーの属性からUPNを削除すると、認証は常に失敗します。とにかくUPNなしで認証することはありますか? –

関連する問題