21

MVC3アプリケーションを構築し、TPTBは、カスタム認証プロバイダーを使用することを望んでいます。ただし、開発中、この認証プロバイダーは、ブラウザーをシャットダウン/再起動するまでエラーが発生するか、コンパイルのたびに再ログオンする必要があるため、一種の苦痛です。

今のところ<authentication mode="None"/>、web.configに追加しました。これは、[Authorize(Roles = "Admin")]フィルターを使用するアクションまたはコントローラーに遭遇するまで正常に機能します(管理者だけでなく、任意の役割にすることができます)。それらの1つにヒットすると、空白のページがレンダリングされます。

これらのフィルターをグローバルに一時的にオフにする方法はありますか?または、開発中にユーザーにすべての役割を与えるだけですか?

編集

はっきりさせておきますが、私は実際にMVC2からMVC3に大きなアプリを移植しています。それはそれ全体にたくさんあり[Authorize(Roles="Admin")]ます[Authorize(Roles="Admin,Editor")]。可能であれば、それらすべてを変更したくはありません。

すべての役割を自動的に提供する小さなカスタム役割プロバイダーを作成する必要がありますか?

4

4 に答える 4

32

リクエストが次の送信元からのものである場合、チェックを実行しないカスタムの承認フィルターを作成できますlocalhost

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (httpContext.Request.Url.IsLoopback)
        {
            // It was a local request => authorize the guy
            return true;
        }

        return base.AuthorizeCore(httpContext);
    }
}
于 2012-12-07T16:59:45.913 に答える
17

ディレクティブを使用して、実現を継承しAuthorizeAttribute、分離することができます。#if DEBUG

public class MyAuthorizeAttribute: AuthorizeAttribute
{
#if DEBUG
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        return true;
    }
#endif
}

または#define YOUR_OWN_FLAG、ビルド、デバッグ、またはリリースで動作をオンまたはオフにします。

于 2012-12-07T17:01:08.773 に答える
8

Web APIの場合:

public class MyAuthorizeAttribute : System.Web.Http.AuthorizeAttribute
{
    protected override bool IsAuthorized(HttpActionContext actionContext)
    {
        return actionContext.Request.RequestUri.IsLoopback || base.IsAuthorized(actionContext);
    }
}
于 2015-01-06T06:49:49.467 に答える
1

私もこれを探していて、以下のコードのように解決することになりました。開発環境にAllowAnonymousFilterを追加するだけで、開発環境での認証が無効になります。

if (env.IsDevelopment()) {
services.AddMvc(opts =>
{
   opts.Filters.Add(new AllowAnonymousFilter());
});
} else {
 services.AddMvc();
}
于 2019-12-09T21:34:37.527 に答える