0

IIS 6でSessionAuthenticationModuleを使用すると問題が発生します。アプリケーションにアクセスしようとすると、次の例外が発生します。

データ保護操作は失敗しました。これは、現在のスレッドのユーザーコンテキストに対してユーザープロファイルがロードされていないことが原因である可能性があります。これは、スレッドが偽装している場合に発生する可能性があります。

私が理解できたのは、IIS 7でプロファイルを有効にすることは可能ですが、ホスティング会社はIIS6を使用しているということです。何か試してみませんか、それとも一般的なアイデアですか?

スタックトレース:

[CryptographicException: The data protection operation was unsuccessful. This may have been caused by not having the user profile loaded for the current thread's user context, which may be the case when the thread is impersonating.]
    System.Security.Cryptography.ProtectedData.Protect(Byte[] userData, Byte[] optionalEntropy, DataProtectionScope scope) +456
    Microsoft.IdentityModel.Web.ProtectedDataCookieTransform.Encode(Byte[] value) +54

[InvalidOperationException: ID1074: A CryptographicException occurred when attempting to encrypt the cookie using the ProtectedData API (see inner exception for details). If you are using IIS 7.5, this could be due to the loadUserProfile setting on the Application Pool being set to false. ]
    Microsoft.IdentityModel.Web.ProtectedDataCookieTransform.Encode(Byte[] value) +146
    Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ApplyTransforms(Byte[] cookie, Boolean outbound) +47
    Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.WriteToken(XmlWriter writer, SecurityToken token) +470
    Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.WriteToken(SessionSecurityToken sessionToken) +89
    Microsoft.IdentityModel.Web.SessionAuthenticationModule.WriteSessionTokenToCookie(SessionSecurityToken sessionToken) +123
4

4 に答える 4

2

ダミーのウィンドウ サービスを作成し、Web サービスにウィンドウ サービスをインストールし、そのログオン アカウントを Web アプリのアプリ プール アカウントと同じになるように変更します。それはうまくいくはずです

于 2011-03-23T16:31:40.797 に答える
1

ローカルIIS7サーバーでも同じ問題が発生し、アプリプールでloadUserProfileをtrueに設定することで解決しました。IIS6に関して次のことがわかりました。

IIS6では、どのプロセスIDが構成されているかに関係なく、すべてのワーカープロセスが一時ディレクトリとしてC:\ windows\tempに使用されていました。より具体的には、どのワーカープロセスもデフォルトで「ユーザープロファイル」をロードしなかったため、すべてのプロセスが一時ディレクトリとしてc:\ windows\tempを使用していました。Windowsでは、すべてのユーザーがこのディレクトリで特権の読み取り/書き込み/作成を行うことができます。これにより、「正常に機能する」ことができます。これのマイナスの副作用は、すべてのAppPoolがデフォルトで同じ一時ディレクトリを効果的に共有していることです。これにより、appPool間の情報開示につながる可能性があります。IIS7では、より安全なデフォルトを選択し、すべてのアプリケーションプールに対してデフォルトでユーザープロファイルをロードするようになりました。

loadUserProfileおよびIIS7

したがって、IIS6はデフォルトで一時ディレクトリをロックダウンするべきではないようです。あなたのホスティング業者が同じ理由でそれをロックダウンしたのではないかと思います。

于 2010-10-26T12:15:43.433 に答える
0

有効なアカウントを持っていたサーバーでこの例外が発生しましたが、それを使用してログインしたことはありません。ユーザーは AD を使用しているため、これが可能になります。実際にユーザーとしてログインすることを除いて、ほとんどすべてを試しました。私はついにそれをやろうと思いました、そしてそれは魅力のように働きました.

于 2012-10-10T15:55:17.400 に答える
0

DPAPI の代わりに RSA を使用してセッション トークンを保護することにより、ユーザー プロファイルの必要性を回避できます。これは、実際にはすべての展開のベスト プラクティスですが、特に負荷分散の場合はベスト プラクティスです (企業内で負荷分散されていない人はいますか?)。

Dominick Baier がこれについて少し書いています: http://leastprivilege.com/2010/02/19/wcf-wif-and-load-balancing-and-a-bit-of-azure/

于 2011-08-06T21:51:11.467 に答える