none
ログインユーザのActiveDirectoryのOU情報取得 RRS feed

  • 質問

  • お世話になっております。

    フォーラム内を検索してみてみたのですが

    該当のものが見つからなかったので質問をさせていただきます。

    VisualStudio2010でVB.netで開発しております。

    Windowsにログインしているユーザは

    WindowsIdentity.GetCurrent.User

    で取得できるようですが、

    このユーザのActiveDirectoryで設定されている"OU"を取得したのですが

    どのようにしたらよいかご教授いただきたいです。

    ActiveDirectoryの知識はほぼないです。

    よろしくお願いいたします。

    2015年4月16日 7:46

回答

  • レスが遅くなりました。

    > 2.取得したdistinguishedNameからOUを取得

    というところは、質問者さんが具体的にどのようにしたのか分かりませんので、それより良い方法かどうかはわかりませんが、自分が知っている例を紹介しておきます。(同じことをしているような気もしますが)

    以下の MSDN ライブラリのサンプルコード LdapAuthentication.cs を見てください。

    ASP.NET からの Active Directory ドメイン サービス認証
    https://msdn.microsoft.com/ja-jp/library/ms180890.aspx

    その中の IsAuthenticated メソッドで、ドメイン名、ユーザー名、パスワードで検索し、SearchResult.Path プロパティで検索結果のパス(ADsPath・・・DistinguishedName が含まれるはずです)を取得しています。

    LDAP ADsPath
    https://msdn.microsoft.com/en-us/library/aa746384(v=vs.85).aspx

    自分の環境(Windows Server 2008 の AD DC。サーバ名は "svr2k8" )で試してみました。「本社」という OU を追加し、それにユーザーを "日本 太郎" という表示名で登録した場合、SearchResult.Path は以下のようになります。

    LDAP://svr2k8/CN=日本 太郎,OU=本社,DC=bglb,DC=jp

    • 回答の候補に設定 星 睦美 2015年4月21日 5:25
    • 回答としてマーク 星 睦美 2015年4月22日 5:59
    2015年4月17日 5:41

すべての返信

  • .net active directory ou などをキーワードにググるといろいろヒットすると思いますが、やってみましたか?

    例えば下記:

    .NETからActive Directoryデータにアクセス ~組織単位(OU)情報の取得と表示~
    http://www.slideshare.net/mitchin227/netactive-directory-ou

    ご自分で情報を集めて、ご自分の手を動かしていろいろやってみて、その上で分からない点を質問される方が解決が早いと思います。


    • 編集済み SurferOnWww 2015年4月16日 8:25 欠落部分追加
    2015年4月16日 8:24
  • 補足です。

    DirectoryEntryを使い

    DirectorySearcherで、

    filterを"(&(objectClass=organizationalUnit))"

    として、distinguishedNameにてOUをとることはできたような気がします。

    (正しい取り方かはわかりませんが。)

    ただ、ログインユーザに限定することができていません。

    ログインユーザのSIDは

     WindowsIdentity.GetCurrent.User

    で取得できるようですが、どう使ったらよいのかがわかりません。


    • 編集済み kz20140602 2015年4月16日 8:38 追記
    2015年4月16日 8:26
  • SurferOnWww様

    返信ありがとうございます。

    いろいろと試しています。

    WindowsIdentity.GetCurrent.Nameを使って

    sAMAccountNameに対してfilterをすることでログインユーザに限定することができました。

    整理しますと

    1.WindowsIdentity.GetCurrent.Nameのユーザ名のみを取得して

      sAMAccountNameに対してfilter

    2.取得したdistinguishedNameからOUを取得

    としました。

    他によい案がありましたら教えていただければと思います。

     

    2015年4月16日 9:02
  • レスが遅くなりました。

    > 2.取得したdistinguishedNameからOUを取得

    というところは、質問者さんが具体的にどのようにしたのか分かりませんので、それより良い方法かどうかはわかりませんが、自分が知っている例を紹介しておきます。(同じことをしているような気もしますが)

    以下の MSDN ライブラリのサンプルコード LdapAuthentication.cs を見てください。

    ASP.NET からの Active Directory ドメイン サービス認証
    https://msdn.microsoft.com/ja-jp/library/ms180890.aspx

    その中の IsAuthenticated メソッドで、ドメイン名、ユーザー名、パスワードで検索し、SearchResult.Path プロパティで検索結果のパス(ADsPath・・・DistinguishedName が含まれるはずです)を取得しています。

    LDAP ADsPath
    https://msdn.microsoft.com/en-us/library/aa746384(v=vs.85).aspx

    自分の環境(Windows Server 2008 の AD DC。サーバ名は "svr2k8" )で試してみました。「本社」という OU を追加し、それにユーザーを "日本 太郎" という表示名で登録した場合、SearchResult.Path は以下のようになります。

    LDAP://svr2k8/CN=日本 太郎,OU=本社,DC=bglb,DC=jp

    • 回答の候補に設定 星 睦美 2015年4月21日 5:25
    • 回答としてマーク 星 睦美 2015年4月22日 5:59
    2015年4月17日 5:41
  • SurferOnWww様

    返信ありがとうございます。

    distinguishedNameの取得自体は、

    属性情報としてとれたので特別に作りこみはしておりません。

    distinguishedNameから取得は、

    文字列検索でOUの値を抜き出して取得する方法を検討しています。

    似たような方法のようなのでこちらで進めさせていただきます。

    質問がわかりづらく申し訳ございませんでした。

    2015年4月24日 1:56