У меня есть служба WCF для каждого вызова, которая размещается в IIS (.svc). В конструкторе службы я установил Thread.CurrentPrincipal = HttpContext.Current.User согласно this article. В этом случае HttpContext.Current.User имеет тип Microsoft.IdentityModel.Claims.ClaimsPrincipal и имеет претензии, которые были отправлены обратно из моей пользовательской пассивной STS. неThread.CurrentPrincipal службы ASP.Net WCF отбрасывается некоторым перехватчиком в среде Federated (WIF)
Однако, как только я шаг в моей работе службы и изучить Thread.CurrentPrincipal, в то время как этот объект еще типа Microsoft.IdentityModel.Claims.ClaimsIdentity, сам объект уже не такой же, как HttpContext.Current.User (IsAuthenticated = ложь, AuthenticationType = "" и имя является недействительным на Thread.CurrentPrincipal.Identity), в то время как эти значения все еще заполнены правильно на HttpContext.Current.User. Это говорит мне, что что-то перехватывает вызов операции и неправильно меняет текущий принцип на какой-то общий, пустой, неаутентифицированный главный принцип.
Я проверил идентификатор потока в конструкторе, а также в работе, и это то же самое в обоих местах, и оценки Thread.CurrentPrincipal в ближайшем окне после назначения из HttpContext.Current.User показывает, что в конструкторе правильно задается тождество потоков, поэтому между конструктором и методом происходит определенная работа, и что-то меняет мой Thread.CurrentPrincipal.
Кто-нибудь знает, что это делает, и как я могу предотвратить предотвращение/исправление этого поведения?
Это решение работает, однако я не уверен, есть ли ошибка в существующем IdentityModelServiceAuthorizationManager - я чувствую, что он должен быть в состоянии сказать, что он работает в режиме совместимости ASP.NET, и поэтому должен иметь возможность основной из HttpContext.Current.User автоматически. Должен ли я сообщить об этом Microsoft как об ошибке, прежде чем они отправят Microsoft.IdentityModel 1.0.0.0? –