WIF 4.5 Znacznik bezpieczeństwa BootstrapContext null

Korzystam z nowego materiału 4.5 WIF, aby uwierzytelnić użytkowników witryny i zabezpieczyć komunikację między moją stroną internetową MVC a usługami WCF.

Mam skonfigurowaną witrynę internetową, aby zapisać kontekst ładowania początkowego, dzięki czemu mogę ponownie użyć tego samego tokena zabezpieczającego dla wszystkich żądań do warstwy usług.

W normalnych warunkach wszystko działa poprawnie, gdy każde żądanie strony jest uwierzytelniane, a SecurityToken jest udostępniany w kontekście w celu zabezpieczenia wywołań WCF.

Jeśli jednak domena aplikacji internetowej zostanie zresetowana (np. Podczas budowania aplikacji), wszelkie żądania do witryny będą nadal uwierzytelniane, ale SecurityToken nie będzie już dostępny w kontekście, aby przekazać połączenia WCF.

DebugowanieBootstrapContext ma 4 przydatne właściwości:

SecurityToken
SecutiryTokenHandler
Token
TokenBytes

Resetowanie domeny pre-app SecurityToken i SecurityTokenHandler mają wartości, a Token po zresetowaniu ma wartość.

Określenie wartości dla tokena po zresetowaniu wygląda tak, jakby był to surowy XML SAML, więc mogę przypuszczalnie rehydratować z niego pełny SecutiryToken, ale wydaje się to dziwnym zachowaniem, że nie mogę znaleźć żadnej dokumentacji na ten temat.

Jakieś pomysły, co mogę zrobić, aby zapewnić, że SecurityToken jest zawsze dostępny, aby oszczędzić mi kłopotów z tokenem XML?

Aktualizacja

Używając dotPeek do przyjrzenia się temu, co dzieje się w źródłowym kodzie źródłowym, mogłem zobaczyć ścieżkę wykonania, która powoduje to zachowanie, ale nie mogłem określić żadnego powodu, dla którego musiałoby być tak i jak można by go uniknąć.

W końcu zrezygnowałem z próby rozwiązania tego problemu i teraz używam następującego kodu, aby mieć pewność, że mam token

if (context.SecurityToken != null)
{
    token = context.SecurityToken;
}
else if (context.Token.IsNotEmpty())
{
    var handlers = FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers;
    token = handlers.ReadToken(new XmlTextReader(new StringReader(context.Token)));
}

To, co mnie teraz martwi, to to, że przegapiłem kilka argumentów za tym zachowaniem, a moja poprawka powyżej zostanie w pewnym momencie wysadzona.

questionAnswers(3)

yourAnswerToTheQuestion