- - PR -
C#からActive Directoryのユーザ、グループのSIDを取得したい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-12-13 22:31
MSDN Online「Active Directory でフォーム認証を使用する方法」を参考にしています。
http://www.microsoft.com/japan/msdn/net/security/SecNetHT02.asp ログイン認証、およびユーザが所属するグループ名の取得はできたのですが、 ユーザとグループのSID(S-1-5-21-……-513)の取得方法が分かりません。 http://www.dotnet247.com/247reference/msgs/32/163897.aspx を参考に、objectsidプロパティを取得し、中身を展開してみましたが、 S-1-5-…の形式では取得できませんでした。 S-1-5-…の形式で取得する方法をご存知の方がいらっしゃいましたら、 教えてください。よろしくお願いします。 以下、グループを取得するメソッド部分を抜粋します。 ----------------------------------- public string GetGroups() { // *************************** // memberofグループを取得 // *************************** DirectorySearcher search = new DirectorySearcher(_path); search.Filter = "(cn=" + _filterAttribute + ")"; search.PropertiesToLoad.Add("memberOf"); search.PropertiesToLoad.Add("PrimaryGroupID"); StringBuilder groupNames = new StringBuilder(); try { SearchResult result = search.FindOne(); primaryGroupId = (int)result.Properties["PrimaryGroupID"][0]; foreach(String Key in result.Properties.PropertyNames) { // membrtofプロパティがあったら、中身を取得 if(Key.Equals("memberof")) { String dn; int equalsIndex, commaIndex; int propertyCount = result.Properties["memberOf"].Count; for( int propertyCounter = 0; propertyCounter < propertyCount; propertyCounter++) { dn = (String)result.Properties["memberOf"][propertyCounter]; equalsIndex = dn.IndexOf("=", 1); commaIndex = dn.IndexOf(",", 1); if (-1 == equalsIndex) { return null; } groupNames.Append("|"); groupNames.Append(dn.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1)); } } } } catch(Exception ex) { throw new Exception("Error obtaining group names. " + ex.Message); } // *************************** // 「primary」グループを取得 // *************************** search = new DirectorySearcher(_path); search.Filter = "(objectclass=group)"; search.PropertiesToLoad.Add("PrimaryGroupToken"); search.PropertiesToLoad.Add("distinguishedName"); search.PropertiesToLoad.Add("objectsid"); try { foreach(SearchResult result in search.FindAll()){ int equalsIndex, commaIndex; int groupToken = (int)result.Properties["PrimaryGroupToken"][0]; string groupName = (string)result.Properties["distinguishedName"][0]; // SIDの取得?? start System.Array ob = (System.Array)result.Properties["objectsid"][0]; string sid = ""; for(int i=0; i<ob.Length; i++) { sid += ((byte)ob.GetValue(i)).ToString("X2"); } // SIDの取得?? end // primaryグループの場合 if(primaryGroupId == groupToken) { equalsIndex = groupName.IndexOf("=", 1); commaIndex = groupName.IndexOf(",", 1); if (-1 == equalsIndex) { return null; } groupNames.Insert(0, groupName.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1)); } } } catch(Exception ex) { throw new Exception("Error obtaining group names. " + ex.Message); } return groupNames.ToString(); } | ||||
|
投稿日時: 2004-12-14 01:24
南部です。
こんな感じどうでしょうか。 [ メッセージ編集済み 編集者: nanbu 編集日時 2004-12-14 01:59 ] | ||||
|
投稿日時: 2004-12-14 20:28
>南部さま
ありがとうございます! S-1-5-…の形式で取得できました。 |
1