1

DirectoryServices を使用して、ADLDS (軽量の Active Directory) に対してユーザーを認証しています。認証に合格した後。現在ログインしているユーザーの DN または SID を特定するにはどうすればよいですか?

using (DirectoryEntry entry = new DirectoryEntry(<a>LDAP://XYZ:389</a>,
userName.ToString(),
password.ToString(),
AuthenticationTypes.Secure))
{
try
{
// Bind to the native object to force authentication to happen
Object native = entry.NativeObject;
MessageBox.Show("User authenticated!");
}
catch (Exception ex)
{
throw new Exception("User not authenticated: " + ex.Message);
}
...

ありがとう

アップデート:

で例外が発生します

src = search.FindAll() 
There is no such object on the server.

ログインしているユーザーのクラス タイプが Active Directory ライトウェイトに「foreignSecurityPrincipal」であることに気付いたので、フィルターを次のように変更するだけでよいと考えました。

search.Filter = "(&(objectclass=foreignSecurityPrincipal)" + "(sAMAccountName=" + userName + "))";

しかし、それは私に同じ例外を与えました。私が見逃しているものはありますか?

4

2 に答える 2

3

私の知る限り、ユーザーの LDAP 検索を実行し、AD から識別名プロパティを取得する必要があります。下記参照:

// you can use any root DN here that you want provided your credentials
// have search rights
DirectoryEntry searchEntry = new DirectoryEntry("LDAP://XYZ:389");

DirectorySearcher search = new DirectorySearcher(searchEntry);
search.Filter = "(&(objectclass=user)(objectCategory=person)" +
  "(sAMAccountName=" + userName + "))";    

if (search != null)
{
  search.PropertiesToLoad.Add("sAMAccountName");
  search.PropertiesToLoad.Add("cn");
  search.PropertiesToLoad.Add("distinguishedName");

  log.Info("Searching for attributes");

  // find firest result
  SearchResult searchResult = null;
  using (SearchResultCollection src = search .FindAll())
  {
 if (src.Count > 0)
   searchResult = src[0];
  }

  if (searchResult != null)
  {
    // Get DN here
    string DN = searchResult.Properties["distinguishedName"][0].ToString();
  }
于 2010-04-08T16:23:22.080 に答える
0

Active Directory に新しいユーザーを手動で追加すると、「識別名」を手動で定義することはできませんが、規則は名 + ' ' + 姓のようです。この場合、このパターンに従って「識別名」を取得してみませんか。また、人間以外のユーザーを作成するために名前を指定しただけの場合、「識別名」は名前の後にスペースを入れずに同じになることもわかりました。

私は自分のアプリケーションでこのパターンに従っていますが、それは機能し、ユーザーを検索するためのカスタム クエリを作成するよりもはるかに簡単です。

于 2013-01-05T03:34:44.503 に答える