新しい4.5WIFを使用して、Webサイトのユーザーを認証し、MVCWebサイトとWCFサービス間の通信を保護しています。
サービスレイヤーへのすべてのリクエストに同じセキュリティトークンを再利用できるように、ブートストラップコンテキストを保存するようにWebサイトを構成しています。
通常の状態では、認証された各Webサイト要求ですべてが正常に機能し、WCF呼び出しを保護するためにコンテキストを介してSecurityTokenが使用可能になります。
ただし、Webサイトのアプリドメインがリセットされた場合(開発中にアプリをビルドする場合など)、Webサイトへの要求は引き続き認証されますが、WCF呼び出しに渡すコンテキストでSecurityTokenを使用できなくなります。
デバッグには、次のBootstrapContext
4つの便利なプロパティがあります。
SecurityToken
SecutiryTokenHandler
Token
TokenBytes
アプリ前ドメインリセットのSecurityTokenとSecurityTokenHandlerには値があり、リセット後トークンには値があります。
リセット後のTokenの値を見ると、これは生のSAML XMLのように見えるので、おそらく完全なSecutiryTokenを再水和できますが、これはドキュメントが見つからない奇妙な動作のようです。
トークンXMLをいじくり回す手間を省くために、SecurityTokenを常に利用できるようにするために私ができることはありますか?
アップデート
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)));
}
私が今心配しているのは、この振る舞いの背後にあるいくつかの理由を見逃しており、上記の私の修正はある時点で爆発するだろうということです。