はい、ありますが、ドメインの所有に依存する方法もあります。
P/Invoke と Windows API を使用して SID をユーザー ID に変換する方法、または .NET 2.0+ で P/Invoke を使用しない方法については、このページを参照してください。
System.Security.Principal を使用します。
// ユーザー sid を domain\name string account = new SecurityIdentifier(stringSid).Translate(typeof(NTAccount)).ToString(); に変換します。
AD とそこにユーザー ID がある場合は、DirectorySearcher メソッドまたはアカウント管理 API を使用してグループを検索します。それ以外の場合は、この記事で説明されている方法を使用し
てローカル グループを取得してください。
- @tvanfosson によって提案された API を使用して、グループを反復処理し、SID を取得します。または、以下の情報に従ってください。
ASP.NET アプリケーションでは、ユーザーがフォーム認証ではなく Windows によって認証されている場合、このようなコードを使用してグループ情報にアクセスできます。この例では、その環境でスローされる例外に関する興味深いメモを残しましたが、他のユーザーにも適用される可能性があります。
public List<string> GetGroupsFromLogonUserIdentity()
{
List<string> groups = new List<string>();
HttpRequest request = HttpContext.Current.Request;
if (request.LogonUserIdentity.Groups != null)
{
foreach (IdentityReference group in request.LogonUserIdentity.Groups)
{
try
{
groups.Add(group.Translate(typeof(NTAccount)).ToString());
}
catch (IdentityNotMappedException)
{
// Swallow these exceptions without throwing an error. They are
// the result of dead objects in AD which are associated with
// user accounts. In this application users may have a group
// name associated with their AD profile which cannot be
// resolved in the Active Directory.
}
}
}
return groups;
}
LogonUserIdentity は、 WindowsIdentityクラスに基づいています。このコード サンプルを変更して、WindowsIdentity を使用し、Web 以外のアプリケーションで機能させることができます。グループを反復処理すると、SecurityIdentifier を取得するために次のようなことができるはずです。
SecurityIdentifier secid = group as SecurityIdentifier;