7

私はowinを使ってasp.net 4.5 Web APIを実行しています。Owin WebApi2からメッセージ401を返す

{"Message":"Authorization has been denied for this request."} 

私はこの応答(期限切れのトークン、無効な役割など)への追加の詳細を追加したいとカスタムを実装:不正な要求が行われるたび、それは予想通り、次の応答に401を返しますこのSO postに基づいて[AuthorizeAttribute]。その後、

public class MyAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override void HandleUnauthorizedRequest(HttpActionContext actionContext) 
    { 
     var response = actionContext.Request.CreateResponse<MyError> 
      (new MyError() { Description = "This is why you're unauthorized" }); 
     response.StatusCode = HttpStatusCode.Unauthorized; 
     actionContext.Response = response; 
    } 
} 

と、このように私のコントローラ上でそれを使用:しかし、私はどのように表示されていない

{"Description": "This is why you're unauthorized"} 

:予想通り、次の応答に401を返す

[MyAuthorizeAttribute(Roles = "Foo")] 
public class MyController : ApiController 
{ 
    ... 
} 

要求が許可されていない理由をHttpActionContextからMyAuthorizeAttribute.HandleUnauthorizedRequestに渡します。たとえば、ローカルでデバッグしていて、有効期限が切れているトークンを要求すると、を説明するSecurityTokenExpiredExceptionが表示されるか、無効なオーディエンスが表示されますMessage=IDX10214: Audience validation failed. Audiences: '...'. Did not match: validationParameters.ValidAudience: 'null' or validationParameters.ValidAudiences: '...'.Startup.csにいくつかのブレークポイントを設定しましたが、これらの例外の1つが投げられる前に。

owinミドルウェアを使用して要求が許可されていない特定の理由を特定するにはどうすればよいですか?

答えて

0

有効期限や無効な視聴者などを特定する方法はわかりませんでしたが、少なくともこれを使用してロールに基づいて403を返しました。

上記の質問の例を使用して、メッセージ(「このアクションにアクセスするにはロールXが必要です...」)をカスタマイズできます。

public class MyAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override void HandleUnauthorizedRequest(HttpActionContext actionContext) 
    { 
     base.HandleUnauthorizedRequest(actionContext); 

     if (actionContext.RequestContext.Principal != null && 
      actionContext.RequestContext.Principal.Identity.IsAuthenticated && 
      Roles != null) 
     { 
      if (!Roles.Split(',').Any(x => 
       actionContext.RequestContext.Principal.IsInRole(x.Trim()))) 
      { 
       actionContext.Response.StatusCode = HttpStatusCode.Forbidden; 
      } 
     } 
    } 
} 
+0

OWINを使用してこれを処理するチャンスはまだありませんか? –

関連する問題