Исключение при получении серверной переменной REMOTE_USER

2

У нас есть обработчик HTTP ashx, который извлекает переменную REMOTE_USER из ServerVariables во время ProcessRequest.

public void ProcessRequest(HttpContext context)
{
    if (context.Request.ServerVariables["REMOTE_USER"].Contains("\\")) // exception is thrown here
    ...

Аутентификация выполняется IIS с использованием базовой проверки подлинности (учетные записи Windows на контроллере домена).

Для некоторых пользователей это начинает работать неудачно (после работы в течение нескольких часов) и бросает следующее исключение:

[IdentityNotMappedException: Some or all identity references could not be translated.]
   System.Security.Principal.SecurityIdentifier.Translate(IdentityReferenceCollection sourceSids, Type targetType, Boolean forceSuccess) +7608560
   System.Security.Principal.SecurityIdentifier.Translate(Type targetType) +100
   System.Security.Principal.WindowsIdentity.GetName() +164
   System.Security.Principal.WindowsIdentity.get_Name() +31
   System.Web.HttpRequest.CalcDynamicServerVariable(DynamicServerVariable var) +8726378
   System.Web.HttpServerVarsCollection.GetSimpleServerVar(String name) +424
   System.Web.HttpServerVarsCollection.Get(String name) +8634072
   System.Collections.Specialized.NameValueCollection.get_Item(String name) +7
   Some.Namespace.AHttpHandler.ProcessRequest(HttpContext context) in c:\afolder\AHttpHandler.ashx.cs:34
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181 
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75 

После перезапуска пула приложений этого приложения проблема будет решена примерно на один день.

Любые идеи? Следует ли использовать другую переменную сервера для получения имени пользователя?

Спасибо!

  • 0
    The authentication is handled by IIS using basic authentication , это так? Но при базовой аутентификации пароль пользователя передается через заголовки HTTP. Вы имеете в виду windows authentication ?
  • 0
    Да, это обычная проверка подлинности, в которой используется пользователь из Active Directory: идентификатор Windows.
Теги:
iis

1 ответ

1

Как насчет того, чтобы сделать фреймворк вашей грязной работой для вас?

context.User.Identity.Name должен содержать те же самые данные.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню