Как получить доступ к идентификатору сети в asp.net 4.0

#.net #authentication #windows-authentication #asp.net-4.0

#.net #аутентификация #windows-аутентификация #asp.net-4.0

Вопрос:

Я создал тестовое веб-приложение в.Net framework 4.0 со страницей Default.aspx. Я просто хочу получить доступ к идентификатору сети пользователя, поэтому я написал следующий код в коде default.aspx, но получаю пустое значение при запуске приложения, нажимая клавишу F5:

 string username = Page.User.Identity.Name;
  

и в web.config включите режим проверки подлинности Windows:

 <authentication mode="Windows" />
  

затем я попробовал следовать в консольном приложении, и я могу получить свой идентификатор сети:

 Console.WriteLine(Environment.UserName);
  

Я пропускаю какие-либо шаги настройки в веб-приложении.

Спасибо

Ответ №1:

Я использую производственный код, который будет получать информацию о пользователе, а также проверять группы объявлений.

создайте переменную, которая инициализирует класс и получит доступ к любому нужному вам методу, который вернет вам вашу информацию о AD Network.

 using System.DirectoryServices.AccountManagement;
using System.Security.Principal;

public class IsUserInRole
{

public static bool IsInGroup(string groupName)
{
    var myIdentity = GetUserIdWithDomain();
    var myPrincipal = new WindowsPrincipal(myIdentity);
    return myPrincipal.IsInRole(groupName);
}


public bool IsInGroup(List<string> groupNames)
{
    var myIdentity = GetUserIdWithDomain();
    var myPrincipal = new WindowsPrincipal(myIdentity);

    if (groupNames.Any(@group => myPrincipal.IsInRole(@group) == true))
    {
        return true;
    }
    else
    {
        return false;
    }

}

public static WindowsIdentity GetUserIdWithDomain()
{
    WindowsIdentity myIdentity = WindowsIdentity.GetCurrent();
    return myIdentity;
}

public static string GetUserId()
{
    var id = GetUserIdWithDomain().Name.ToString().Split("\");
    return id(1);
}


public static string GetUserDisplayName()
{
    var id = GetUserIdWithDomain().Name.ToString().Split("\");

    var dc = new PrincipalContext(ContextType.Domain, id(0));
    var adUser = UserPrincipal.FindByIdentity(dc, id(1));
    return adUser.DisplayName;

}


}
  

Редактировать 1

После того, как ваши комментарии вернут пользователю его, вам нужно добавить следующее в свой файл web.config

   <system.web>
    <identity impersonate="true" />
   ...
  </system.web>
  

А затем также в IIS перейдите на свой сайт приложение, затем перейдите к авторизации, затем отключите анонимного пользователя, включите ASP.Олицетворение сети и проверка подлинности Windows

введите описание изображения здесь

Редактировать 2

Когда вам требуется доступ, это означает, что у вас неправильно установлены разрешения

Комментарии:

1. Я написал следующую строку в ответе события Page_Load. Напишите («Имя пользователя: » WindowsIdentity. GetCurrent().Name);’ и размещенный веб-сайт в IIS. Я получил следующее сообщение на странице: Имя пользователя: IIS APPPOOL TestWeb Вместо этого он должен отображать мое доменное имя и идентификатор сети, например, имя пользователя: mydomain mynetowrkid

2. хорошо, и что это вам дало? Также какова ваша настройка IIS для повторной аутентификации ваших пользователей на сайте.

3. после этого, чтобы получить аутентификацию Windows, я сделал следующее: Анонимная аутентификация IIS отключена ASP.NET Олицетворение отключено, проверка подлинности форм отключена, проверка подлинности Windows включена и в web.config <режим аутентификации =»Windows» /> Теперь, если я просматриваю веб-сайт, у меня появляется окно безопасности Windows и запрашиваются мои учетные данные Windows. Я попытался использовать свои данные для входа в Windows, но получил следующее сообщение: Имя пользователя: mydomain mynetworkid Пароль: мой пароль Windows Ошибка HTTP 401.1 — несанкционированный

4. где ваше веб-приложение хранится на сервере? Есть ли у вашего использования права доступа к этой папке области?

5. @Sukhi просто снова читаю ваши комментарии, вам нужно включить олицетворение