8

私は WIF を使用して新しい Web サイトを認証してきました。STS は starter-sts 実装に基づいています。

負荷分散された環境でこれが正しく機能するようにするために、global.asax で次を使用して、デフォルトの証明書の動作をオーバーライドしました。

void onServiceConfigurationCreated(object sender, ServiceConfigurationCreatedEventArgs e)
        {
            List<CookieTransform> sessionTransforms = new List<CookieTransform>(new CookieTransform[] 
            { 
                new DeflateCookieTransform(), 
                new RsaEncryptionCookieTransform(e.ServiceConfiguration.ServiceCertificate),
                new RsaSignatureCookieTransform(e.ServiceConfiguration.ServiceCertificate)
            });

            SessionSecurityTokenHandler sessionHandler = new SessionSecurityTokenHandler(sessionTransforms.AsReadOnly());
            e.ServiceConfiguration.SecurityTokenHandlers.AddOrReplace(sessionHandler);
        }

これはすべて機能しており、人々はシステムを正常に使用していますが、時々次のような爆発が発生します。

ID1014: 署名が無効です。データが改ざんされている可能性があります。

イベントログに記録されていたので、WIF トレースをオンにすると、ログに次のように記載されていました。

ID1074: ProtectedData API を使用して Cookie を暗号化しようとしたときに、CryptographicException が発生しました (詳細については、内部例外を参照してください)。IIS 7.5 を使用している場合、これはアプリケーション プールの loadUserProfile 設定が false に設定されていることが原因である可能性があります。

RSAを使用するように実装を変更したので、これは私に影響を与えないはずなので、これが私を暗い路地に導いていると感じています。

私を助けるためのアイデアはありますか?

4

4 に答える 4

4

ブラウザーの Cookie は、「古い」メカニズムである DPAPI で暗号化されます。したがって、サーバーが Cookie を復号化しようとすると失敗します。コードは DPAPI ではなく RSA を使用するようになりました。

回避策として、ブラウザーのキャッシュをクリアすると、アプリケーションが期待どおりに実行を開始します。

于 2012-05-28T20:49:19.287 に答える
2

onkencreated メソッドのタイムアウトを修正するために実装を変更しました。これにより、再発行が防止されます。

protected override void OnSessionSecurityTokenCreated(Microsoft.IdentityModel.Web.SessionSecurityTokenCreatedEventArgs args)
        {
            args.SessionToken = FederatedAuthentication.SessionAuthenticationModule.CreateSessionSecurityToken(
                args.SessionToken.ClaimsPrincipal,
                args.SessionToken.Context,
                DateTime.UtcNow,
                DateTime.UtcNow.AddDays(365),
                true
                );
            //base.OnSessionSecurityTokenCreated(args);
        }
于 2012-06-07T20:55:10.333 に答える
0

エラーが断続的に発生し、トレースに表示されるDPAPI例外と組み合わされて、実際にはCookie変換をオーバーライドしておらず、サービスが引き続きDPAPIを使用していることを示しています。

これは長い道のりかもしれませんが、コードスニペットで、メソッドのオーバーライド「onServiceConfigurationCreated」が小文字のoで始まることに気付きました。このようなタイプミスは、デフォルトのWIF動作を適切にオーバーライドすることを実際に妨げます。

于 2012-06-01T20:07:07.820 に答える
0

loadUserProfileオプションをtrueに設定してみましたか?それでも問題は発生しますか?

(IISでアプリケーションプールを選択し、右側の[詳細設定]をクリックします。[ユーザープロファイルの読み込み]は[プロセスモデル]セクションにあります)。

于 2012-05-28T19:16:09.120 に答える