none
ログオンユーザーの所属するセキュリティグループの取得 RRS feed

  • 質問

  • WindowsにログオンしているActiveDirectoryのユーザー名の取得は、出来ているのですが、そのユーザーの所属するセキュリティグループの取得は可能でしょうか。複数のセキュリティグループに所属する場合もあるので、全て取得したいのですが。

    2006年10月5日 15:00

回答

  • このフォーラムはVWDのフォーラムですが、ASP.NETでWindows認証の状態でユーザが含まれるグループを取得したい、ということでいいんでしょうか。。。

    (WindowsIdentity.GetCurrent()).Groups

    で取り出せそうですが、どうかな。

     

    2006年10月5日 16:52
  • VS .NET2003で作ったものなので ADSI を使ってるため2005では名前空間が違うと思いますが、

    ActiveDirectory ユーザの DirectoryEntry が取得できていて、これが引数 Entry に設定されているとすると

    'グループ名のリストを取得するメソッド

    Private Function GetGroupList(ByVal Entry As DirectoryEntry) As Specialized.StringCollection

    Dim User As ActiveDs.IADsUser = DirectCast(Entry.NativeObject, ActiveDs.IADsUser)

    Dim Groups() As Object = DirectCast(User.GetEx("MemberOf"), Object())

    Dim GroupList As New Specialized.StringCollection

    Dim GroupName As String

    For Each grp As Object In Groups

    GroupName = LDAPPathToGroupName(grp.ToString())

    GroupList.Add(GroupName)

    Next

    Return GroupList

    End Function

     

    'グループ名のLDAPパスからグループ名部分を抜き出すメソッド

    Private Function LDAPPathToGroupName(ByVal LDAPPath As String) As String

    With LDAPPath

    Dim spos As Integer = .IndexOf("="c) + 1

    Dim epos As Integer = .IndexOf(","c)

    If epos > 0 Then

    Return .Substring(spos, epos - spos)

    Else

    Return .Substring(spos)

    End If

    End With

    End Function

     

    これでグループ名のリストを取得できます。

    2006年10月5日 19:05

すべての返信

  • このフォーラムはVWDのフォーラムですが、ASP.NETでWindows認証の状態でユーザが含まれるグループを取得したい、ということでいいんでしょうか。。。

    (WindowsIdentity.GetCurrent()).Groups

    で取り出せそうですが、どうかな。

     

    2006年10月5日 16:52
  • VS .NET2003で作ったものなので ADSI を使ってるため2005では名前空間が違うと思いますが、

    ActiveDirectory ユーザの DirectoryEntry が取得できていて、これが引数 Entry に設定されているとすると

    'グループ名のリストを取得するメソッド

    Private Function GetGroupList(ByVal Entry As DirectoryEntry) As Specialized.StringCollection

    Dim User As ActiveDs.IADsUser = DirectCast(Entry.NativeObject, ActiveDs.IADsUser)

    Dim Groups() As Object = DirectCast(User.GetEx("MemberOf"), Object())

    Dim GroupList As New Specialized.StringCollection

    Dim GroupName As String

    For Each grp As Object In Groups

    GroupName = LDAPPathToGroupName(grp.ToString())

    GroupList.Add(GroupName)

    Next

    Return GroupList

    End Function

     

    'グループ名のLDAPパスからグループ名部分を抜き出すメソッド

    Private Function LDAPPathToGroupName(ByVal LDAPPath As String) As String

    With LDAPPath

    Dim spos As Integer = .IndexOf("="c) + 1

    Dim epos As Integer = .IndexOf(","c)

    If epos > 0 Then

    Return .Substring(spos, epos - spos)

    Else

    Return .Substring(spos)

    End If

    End With

    End Function

     

    これでグループ名のリストを取得できます。

    2006年10月5日 19:05
  • 有難うございます。教えて頂き、以下の方法で取得できました。

    ADSIについてもこれから、試してみようと思います。感謝です。

    using System.Security.Principal;

            IdentityReferenceCollection irc = new IdentityReferenceCollection();
            irc = WindowsIdentity.GetCurrent().Groups;
            foreach  (IdentityReference ir in irc)
        {
                IdentityReference grp = ir.Translate(typeof(NTAccount));
                TextBox1.Text += "【" + grp + "】" + "\r\n";
        }

    2006年10月6日 14:24