Web Apiアプリケーションは長い間働いています。Odataを混在させるとカスタムSystem.Web.Http.AuthorizeAttributeが壊れる
当社は、ユーザーの状態と役割プロバイダを初期化するために、私たち自身のSystem.Web.Http.AuthorizeAttribute
を実装し、のisAuthorized(当社の過負荷時のき)我々はすべて私たちのものを使用して初期化GenericPrincipal
私たち自身にHttpContext.Current.User
とThread.CurrentPrincipal
を設定します。
これは長い間うまくいきました。
私たちはgitからv6.15を取得したので、いくつかのOdata APIを立ち上げるように依頼されました。これは、他のdll(新しい/別のmvc dllなど)に沿ってドラッグされました。どのようにSystem.Web.Http.AuthorizeAttribute
アクションがパイプラインに収まるか。
ここで、[Authorize (Roles="OurFoo")]
は正しく認証していますが、Thread.CurrentPrincipalは実際にメソッドに入る前に、別のものでリセット/スワップアウトされています。それは壊れています
[PrincipalPermission(SecurityAction.Demand, Role = "OurFoo")]
私達のcallstackの下位のパーミッション。
誰かがこれに遭遇し、適切な回避策を考えましたか?
私は、System.Web.Http.AuthorizeAttribute
の代わりにSystem.Web.Mvc.AuthorizeAttribute
をベースとしてスタック記事を見つけましたが、署名が異なり、Thread.CurrentPrincipal
リセットに関する問題が発生するかどうかは不明です。