私は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ミドルウェアを使用して要求が許可されていない特定の理由を特定するにはどうすればよいですか?
OWINを使用してこれを処理するチャンスはまだありませんか? –