У меня есть приложение Flex-WebORB-Asp.NET. При входе в систему существует AuthenticationHandler, который реализует интерфейс WebORB:
IPrincipal CheckCredentials(string username, string password, Request message);
Итак, я создаю Принципала и возвращаю его. WebORB использует принципал для проверки подлинности и авторизации удаленных вызовов методов.
var principal = new GenericPrincipal(new GenericIdentity(user.id.ToString()), new[] { "admin" });
return principal
Теперь, на этом этапе, если я проверю, что такое HttpContext.Current.User.Identity
, это WindowsIdentity.
Пока все хорошо. Когда позже через WebORB выполняется удаленный вызов, я получаю идентификатор пользователя, вошедшего в систему, по телефону:
Thread.CurrentPrincipal.Identity.Name
Так что, я думаю, WebORB удостоверяется, что Идентичность потока устанавливается при каждом удаленном вызове.
Проблема в том, что когда я вызываю HttpHandler (для получения изображения), я также пытаюсь получить идентификатор зарегистрированного пользователя с помощью Thread.CurrentPrincipal.Identity.Name
, но это не работает. Возможно, потому что с HttpHandler, WebORB не вступает в действие.
Как бы вы решили эту проблему, чтобы я мог получить идентификатор вошедшего в систему пользователя в обоих случаях одинаково? Поместить это в объект сеанса? Можете ли вы изменить HttpContext.Current.User.Identity
? Разве HttpContext.Current.User.Identity
не должен совпадать с Thread.CurrentPrincipal.Identity.Name
?
пс: пользователи не в Active Directory.