web-dev-qa-db-ja.com

カスタム許可属性がWeb APIで機能しない

 public class CustomAuthorizeAttribute : AuthorizationFilterAttribute
 {  
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
       return true;// if my current user is authorised
    }
 }

上記は私のCustomAuthorizeAttributeクラスであり、

[CustomAuthorize] // both [CustomAuthorize] and [CustomAuthorizeAttribute ] I tried 
public class ProfileController : ApiController
{
   //My Code..
}

私が電話しているとき

http://localhost:1142/api/Profile 

CustomAuthorizeAttributeを起動していません

My FilterConfigクラスの詳細は以下のようになります

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {            
        filters.Add(new CustomAuthorizeAttribute());
    }
}

私が何かを見逃したら助けてください。

22
b_in_U
  1. Web APIフィルターの代わりにMVCフィルターを使用しているようです。 HttpContextBaseを使用するため、サンプルで検出できます。代わりに、System.Web.Http.Filters名前空間。
  2. Web APIフィルターでOnAuthorizationorOnAuthorizationAsyncをオーバーライドする必要があります。
  3. グローバルフィルターを登録し、コントローラーで装飾する必要はありません。登録すると、すべてのコントローラーで実行されます。

Web APIフィルターコード: https://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Http/Filters/AuthorizationFilterAttribute.cs

21
Yishai Galatzer

カスタム属性はSystem.Web.Http.Filters.AuthorizationFilterAttributeから継承する必要があります

そして、それはこのように見えるはずです

using System.Web.Http.Controllers;
using System.Web.Http.Filters;
public class CustomAuthorizeAttribute : System.Web.Http.Filters.AuthorizationFilterAttribute
{   
    public override bool AllowMultiple
    {
        get { return false; }
    }

    public override void OnAuthorization(HttpActionContext actionContext)
    {
        //Perform your logic here
        base.OnAuthorization(actionContext);
    }
}
11
Toan Nguyen

これで試してみてください。

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        return true;
    }
}
10
leskovar

System.Web.Http.Filters.AuthorizationFilterAttributeから継承した他の回答に追加するには、これをOnAuthorizationメソッドに追加して、ユーザーがログインしたことを確認します。

if (!actionContext.RequestContext.Principal.Identity.IsAuthenticated)
{
     // or whatever sort you want to do to end the execution of the request
     throw new HttpException(403, "Forbidden");
} 
0
Conner