У меня есть служба WCF, работающая под IIS 10 на Windows Server 2016. В этой службе я использую олицетворение для выполнения вызовов в нисходящие системы. Для олицетворения личность получается с помощью WindowsIdentity.GetCurrent (). Имя . Когда к службе WCF подключено несколько пользователей, для некоторых из них идентификатор отображается как «NT AUTHORITY \ SYSTEM», а для других - как «Имя домена \ Имя пользователя». Я хочу понять, почему для некоторых из них это выглядит как "NT AUTHORITY \ SYSTEM".
Я прошел Получение имени текущего пользователя Windows, возвращающего «IIS APPPOOL / Sitename» и попытался выполнить следующие шаги:
- Отключена анонимная аутентификация.
- Включена проверка подлинности Windows и олицетворение ASP.NET.
- Пробовал использовать свойства из класса HttpRequest, но это тоже не сработало.
- В web.config установите для aspNetCompatibilityEnabled значение true в web.config.
- В классе реализации службы задайте для AspNetCompatibilityRequirements значение позволено.
Фрагмент кода, как показано ниже:
WindowsIdentity winId = ServiceSecurityContext.Current.WindowsIdentity;
if (winId != null)
{
if (winId.IsAuthenticated)
{
if ((ServiceSecurityContext.Current.WindowsIdentity.ImpersonationLevel == TokenImpersonationLevel.Impersonation)
|| (ServiceSecurityContext.Current.WindowsIdentity.ImpersonationLevel == TokenImpersonationLevel.Delegation))
{
using (ServiceSecurityContext.Current.WindowsIdentity.Impersonate())
{
userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
......
Я пытался использовать System.Web.HttpContext.Current.User.Identity.Name , но он также периодически возвращает «NT AUTHORITY \ SYSTEM», когда подключено несколько пользователей.
Я ожидаю, что свойство будет возвращать «Доменное имя \ Имя пользователя» каждый раз, но иногда оно возвращает «NT AUTHORITY \ SYSTEM» и «Доменное имя \ Имя пользователя» в другое время. Пожалуйста, предложите, что я должен изменить, чтобы сделать эту работу последовательно.