2015-06-07 6 views
0

Я хочу создать кнопку входа в систему через Active Directory. Так у меня есть идея взять имя пользователь вошедший (Windows) из своего домена:Войти через активный каталог

string Name = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 

, а затем принять группу для входа выше:

string Group = System.Security.Principal.WindowsIdentity.GetCurrent().Groups.ToString(); // <---I think this is wrong ? 
string allowedGroup = "Admins"; 

потом что-то вроде:

if(Name == string.Empty) 
{ 
    MessageBox.Show("Your Name in domain doesn't exist"); 
} 

if(Group.ToString() != allowedGroup) 
{ 
    MessageBox.Show("You don't have permissions to log in"); 
} 
else 
{ 
    MessageBox.Show("Hello"); 
} 

Я думаю, что моя «группа» ошибается. Как мне это сделать? Я не знаю, как точно искать одну или две группы, в которых пользователь назначен. Как насчет того, когда пользователю назначено множество групп?

+0

Пожалуйста, смотрите [ "Должны ли вопросы включают„метки“в их названиях?"] (Http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles), где консенсус «нет, они не должны»! –

ответ

0

Вот как использовать идентификатор Windows для авторизации входа.

1) Получить идентификатор пользователя пользователя.

2) Используйте объект идентификации Windows, чтобы получить другую информацию, такую ​​как имя и группа. используйте имя группы, чтобы подтвердить запрос пользователя. Надеюсь, это вам поможет. Пожалуйста, напишите в комментарии, у вас есть какие-либо вопросы.

System.Security.Principal.WindowsIdentity WI = System.Security.Principal.WindowsIdentity.GetCurrent(); 
     string sUserName = WI.Name; 
     bool bAuthorized = false; 
     string allowedGroup = "Admins"; 
     IdentityReferenceCollection irc = WI.Groups; 
     foreach (IdentityReference ir in irc) 
     { 
      if(ir.Translate(typeof(NTAccount)).Value == allowedGroup) 
      { 
       bAuthorized = true; 
       break; 
      } 
     } 
     if(string.IsNullOrEmpty(sUserName)) 
     { 
      MessageBox.Show("Your Name in domain doesn't exist"); 
     } 
     if(bAuthorized == false) 
     { 
      MessageBox.Show("You don't have permissions to log in"); 
     } 
     else 
     { 
      MessageBox.Show("Hello"); 
     } 
+0

поэтому в строке sGroup у меня есть группы, где назначается пользователь? – Kafus

+0

Ух ... я в замешательстве. Как это будет выглядеть в одной части?: (( – Kafus

+0

Да, строка sGroup будет иметь имя группы, которой назначен пользователь. – Pankaj

0

Хорошо, я получил это. Спасибо за Панкай.

System.Security.Principal.WindowsIdentity WI = System.Security.Principal.WindowsIdentity.GetCurrent(); 
    string sUserName = WI.Name; 
    bool bAuthorized = false; 
    string allowedGroup = "Admins"; 
    IdentityReferenceCollection irc = WI.Groups; 
    foreach (IdentityReference ir in irc) 
    { 
     NTAccount accInfo = (NTAccount)ir.Translate(typeof(NTAccount)); 

     if (accInfo.Value == allowedGroup) 
     { 
      bAuthorized = true; 
      break; 
     } 
    } 
    if(string.IsNullOrEmpty(sUserName)) 
    { 
     MessageBox.Show("Your Name in domain doesn't exist"); 
    } 
    if(bAuthorized == false) 
    { 
     MessageBox.Show("You don't have permissions to log in"); 
    } 
    else 
    { 
     MessageBox.Show("Hello"); 
    } 
Смежные вопросы