您的位置:首页 > 编程语言 > C#

SharePoint使用 C# 获取当前用户的SID

2014-06-10 17:27 806 查看

C# 获取当前用户的SID

2013-08-21 17:16:51| 分类:

C# | 标签:c#
|举报
|字号 订阅

1.简单点的:

System.Security.Principal.WindowsIdentity currentUser = System.Security.Principal.WindowsIdentity.GetCurrent();

string sid = currentUser.User.ToString();

2.复杂点的:

private string GetSid(string strLogin)

{

string str = "";

// Parse the string to check if domain name is present.

int idx = strLogin.IndexOf('\\');

if (idx == -1)

{

idx = strLogin.IndexOf('@');

}

string strDomain;

string strName;

if (idx != -1)

{

strDomain = strLogin.Substring(0, idx);

strName = strLogin.Substring(idx + 1);

}

else

{

strDomain = Environment.MachineName;

strName = strLogin;

}

DirectoryEntry obDirEntry = null;

try

{

Int64 iBigVal = 5;

Byte[] bigArr = BitConverter.GetBytes(iBigVal);

obDirEntry = new DirectoryEntry("WinNT://" +

strDomain + "/" + strName);

System.DirectoryServices.PropertyCollection

coll = obDirEntry.Properties;

object obVal = coll["objectSid"].Value;

if (null != obVal)

{

str = this.ConvertByteToStringSid((Byte[])obVal);

}

}

catch (Exception ex)

{

str = "";

System.Diagnostics.Trace.Write(ex.Message);

}

return str;

}

private string ConvertByteToStringSid(Byte[] sidBytes)

{

StringBuilder strSid = new StringBuilder();

strSid.Append("S-");

try

{

// Add SID revision.

strSid.Append(sidBytes[0].ToString());

// Next six bytes are SID authority value.

if (sidBytes[6] != 0 || sidBytes[5] != 0)

{

string strAuth = String.Format

("0x{0:2x}{1:2x}{2:2x}{3:2x}{4:2x}{5:2x}",

(Int16)sidBytes[1],

(Int16)sidBytes[2],

(Int16)sidBytes[3],

(Int16)sidBytes[4],

(Int16)sidBytes[5],

(Int16)sidBytes[6]);

strSid.Append("-");

strSid.Append(strAuth);

}

else

{

Int64 iVal = (Int32)(sidBytes[1]) +

(Int32)(sidBytes[2] << 8) +

(Int32)(sidBytes[3] << 16) +

(Int32)(sidBytes[4] << 24);

strSid.Append("-");

strSid.Append(iVal.ToString());

}

// Get sub authority count...

int iSubCount = Convert.ToInt32(sidBytes[7]);

int idxAuth = 0;

for (int i = 0; i < iSubCount; i++)

{

idxAuth = 8 + i * 4;

UInt32 iSubAuth = BitConverter.ToUInt32(sidBytes, idxAuth);

strSid.Append("-");

strSid.Append(iSubAuth.ToString());

}

}

catch (Exception ex)

{

System.Diagnostics.Trace.Write(ex.Message);

return "";

}

return strSid.ToString();

}

这段是参考:
http://www.netomatix.com/GetUserSid.aspx http://www.codeproject.com/Articles/3688/How-to-get-user-SID-using-DirectoryServices-classe
要添加引用程序集: System.DirectoryServices(在 system.directoryservices.dll 中),本人用的方法1,方法2没去验证正确性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: