#.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 просто снова читаю ваши комментарии, вам нужно включить олицетворение