2016-11-22 10 views
1

トークンベースの認証を実装しました。 カスタム権限属性を書きたいと思います。Asp.net WebApiのカスタム認証は、許可属性のためだけに呼び出します

この理由は、UserIdentity.GetUserId()がnullを返すことがあるためです。

これを処理するために、私は次のようなカスタムauthorize属性を記述しました。

このカスタム権限は、すべてのコール(匿名または権限のあるコール)をコールします。 したがって、IsAuthorizeCallプロパティを使用して、呼び出しが匿名または許可されているかどうかを確認しました。

このような呼び出しを行うことはできますか?上記の方法を記述した場合にのみ、このカスタムオーサーを呼び出したいと思います。さもなければ、これは呼び出されません。

どうすればいいですか?

public class CustomAuthorize : AuthorizationFilterAttribute 
    { 
     public bool IsAuthorizeCall { get; set; } 
     public override void OnAuthorization(HttpActionContext actionContext) 
     { 
      base.OnAuthorization(actionContext); 
      if (IsAuthorizeCall) 
      { 
       IdentityHelper IdentityHelper = new IdentityHelper(); 
       if (IdentityHelper.UserId== Guid.Empty) 
        actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized); 
      } 
     } 

} 

は、参照:

Custom Authorization in Asp.net WebApi - what a mess?

How to Customize ASP.NET Web API AuthorizeAttribute for Unusual Requirements

答えて

1

私は答え自分自身を発見しました。

フィルタをグローバルなasaxに追加すると、すべてのコントローラとアクションについて、たとえ説明されていても呼び出されます。

だから我々はGlobal.asaxの

GlobalConfiguration.Configuration.Filters.Add(new CustomAuthorize()); 

から以下を削除する必要があるので、今、カスタムathorizeは、コントローラやアクションに言及した場合にのみ、呼び出しになります。

関連する問題