2013-10-29 7 views
12

を無視してカスタムアピ承認は、私がCustomApiAuthorizeAttributeを持っているのAllowAnonymous

[CustomApiAuthorize] 
public class RacingController : CustomApiController 
{ 
    [HttpGet] 
    [AllowAnonymous] 
    public Venues Venues() 
    { 
     var asr = Services.GetVenues(Token); 
     if(!string.IsNullOrEmpty(Token)) 
      SetAuthTicket(asr.Token); 
     return asr.Payload; 
    } 
} 

を、私はこのアクションを呼び出すしようとしたときに401権限エラーを取得しておきます。デバッグでは、authorize属性が[AllowAnonymous]の存在を検出していないが、なぜそれが分からないのかがわかります。

私が間違っていることを誰でも見ることができますか?他の何かが矛盾しているのであれば、何か考えているでしょうか?

+2

AllowAnonymous属性はSystem.Web.MvcとSystem.Web.Httpの2つあります。コード内の2つの参照が同じものであることを確認しましたか? – stames

答えて

13

あなたがSystem.Web.Http.AuthorizeAttributeのソースを見ると、認可をスキップする必要があるかどうかを確認するには、以下のチェックがあります:

public override void OnAuthorization(HttpActionContext actionContext) 
    { 
     if (actionContext == null) 
     { 
      throw Error.ArgumentNull("actionContext"); 
     } 

     if (SkipAuthorization(actionContext)) 
     { 
      return; 
     } 

     if (!IsAuthorized(actionContext)) 
     { 
      HandleUnauthorizedRequest(actionContext); 
     } 
    } 

     private static bool SkipAuthorization(HttpActionContext actionContext) 
    { 
     Contract.Assert(actionContext != null); 

     return actionContext.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any() 
       || actionContext.ControllerContext.ControllerDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any(); 
    } 

だから何私がしたことは内に同様の検査を実施しました。私のカスタム認証属性。

+1

この回避策は完全に機能します。ありがとう! – Ezequiel

関連する問題