2011-12-19 19 views
3

私は本質的にはthisです。しかし、私が組み込みのAuthorizeAttributeを使用するたびに、MVCフレームワーク(私が推測している)は、ユーザーが適切な役割を持っているかどうかを判断するために私のプリンシパルを決して見ません。それは、app_dataディレクトリに新しいMDFファイルを作成しようとし続け、特権を持たないために爆発します。カスタムフォーム認証+ MVC3 + AuthorizeAttribute

これは予期される動作で、私自身のAuthorizeAttributeを取得してプリンシパルを自分でチェックする必要がありますか?

別の奇妙な振る舞いは、私がシングルサインオンしている同じドメインに2つのサイトがあることです。いずれのサイトでも、同じクラスライブラリを使用してAuthenticateRequestのカスタムプリンシパルを再作成しています。プリンシパルが各サイトで正しく設定されていることをデバッグするときに表示されます。ただし、サイト1(ユーザーに認証するもの)は、AuthorizeAttributeを持つアクションを呼び出すとMDFファイルを作成しようとしていますが、これは完全に動作しますが、サイト2はMDFファイルを作成しようとしています。

+0

私はいくつかの情報を見つけたと思います。私のカスタムプリンシパルオブジェクトは、Global.asaxファイル内のPostAuthenticateRequestメソッドでRolePrincipalに変更されています。カスタムプリンシパルセットロジックをPostAuthenticateRequestメソッドに移動した場合。すべて動作しますが、他のサイトでこれを行う必要はありません。web.configファイルの違いはわかりません。ですから、私がやりたいことは、私のプリンシパルをRolePrincipalオブジェクトに変更して、それを無効にすることだけです。 –

答えて

12

私はそれを理解しました。私はこの設定をsystem.webServerのWeb設定に追加しなければなりませんでした。これにより、私のプリンシパルを置き換えるHttpModuleが削除されます。

<modules runAllManagedModulesForAllRequests="true"> 
    <remove name="RoleManager" /> 
</modules> 
+0

問題のあるモジュールを特定するためのおかげで。 'runAllManagedModulesForAllRequests =" true "'というモジュール属性を使用しないことを検討してください。モジュールはjpgイメージ要求のようなものでも実行されるので、他の人は[それを使わない]と言っている(http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html)。これはおそらくリソースの無駄です。 RoleManagerを削除するだけで私の仕事ができました。 –

+0

は魅力的に機能します –

2

既定では、新しいMVC3アプリケーションは既定の承認メカニズムとしてSqlMembershipProviderを使用し、詳細をSQL Express db(MDFファイル)に格納しようとします。

だから、web.configファイルにすることをクリアしてみてください:

<membership> 
    <providers> 
     <clear /> 
    </providers> 
</membership> 

限り、あなたは(IPrincipalIIdentity)が正しく、すべてのセキュリティオブジェクトを実装し、Application_AuthenticateRequest上のフォーム認証チケットをdecryping、内蔵されているよう[Authorize(Roles="RoleName")]にお任せください。

投稿したリンクでは、それは私たちがやっていることの本質的なことです。

+0

ありがとうございます。私はあなたが提案したことを試してみました(前に数回、そしてもう一度安全です)。そして、私はApplication_AuthenticateRequestで設定したカスタムプリンシパルではなくRolePrincipalを取得します。何か案は? –

+0

は、私も試してみました: ' \t \t \t \t ' –