WIF 4.5 BootstrapContext токен безопасности null

Я использую новые 4,5 WIF-устройства для аутентификации пользователей веб-сайта и обеспечения связи между моим веб-сайтом MVC и службами WCF.

У меня есть веб-сайт, настроенный для сохранения контекста начальной загрузки, чтобы я мог повторно использовать один и тот же токен безопасности для всех запросов к уровню обслуживания.

В нормальных условиях все работает нормально, каждый запрос веб-сайта проходит проверку подлинности, а SecurityToken становится доступным через контекст для защиты вызовов WCF.

Однако если домен приложения веб-сайтов будет сброшен (например, при создании приложения во время разработки), любые запросы к веб-сайту будут по-прежнему аутентифицироваться, но SecurityToken больше не будет доступен в контексте для передачи вызовам WCF.

ОтладкаBootstrapContext имеет 4 полезных свойства:

SecurityToken
SecutiryTokenHandler
Token
TokenBytes

Сброс домена перед приложением SecurityToken и SecurityTokenHandler имеют значения, а маркер после сброса имеет значение.

Если взглянуть на значение Token после сброса, это выглядит так, как будто это необработанный SAML XML, поэтому я могу предположительно восстановить его из полного SecutiryToken, но это странное поведение, о котором я не могу найти никакой документации.

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

Обновить

Используя dotPeek, чтобы посмотреть, что происходит в исходном коде фреймворка, я мог видеть путь выполнения, который опровергает это поведение, но я не могне может определить причину, почему это должно было быть так и как это могло быть предотвращено.

В конце я отказался от попыток разобраться с этим и теперь использую следующий фрагмент кода, чтобы убедиться, что у меня есть токен

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)));
}

Что меня сейчас беспокоит, так это то, что я пропустил некоторые причины этого поведения, и мое исправление выше взорвется в какой-то момент.

Ответы на вопрос(3)

Ваш ответ на вопрос