Ho una API web asp.net 4.5 in esecuzione utilizzando owin. Ogni volta che una richiesta non autorizzata è fatto restituisce un 401 con la seguente risposta come previsto:Restituzione di messaggi descrittivi 401 da Owin WebApi2
{"Message":"Authorization has been denied for this request."}
Vorrei aggiungere ulteriori dettagli a questa risposta (di token scaduto, ruolo valido, ecc ...) ed ha implementato un personalizzato [AuthorizeAttribute]
basato su questo SO post.
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;
}
}
e poi utilizzato sulle mie controller come questo:
[MyAuthorizeAttribute(Roles = "Foo")]
public class MyController : ApiController
{
...
}
che restituisce un 401 con la seguente risposta come previsto:
{"Description": "This is why you're unauthorized"}
Tuttavia, non vedo come determinare il motivo per cui la richiesta non è autorizzata da HttpActionContext
passata a MyAuthorizeAttribute.HandleUnauthorizedRequest
. Ad esempio, quando eseguo il debug a livello locale e faccio una richiesta con un token scaduto, viene visualizzato un SecurityTokenExpiredException
che spiega IDX10223: Lifetime validation failed. The token is expired. ValidTo: '...' Current time: '...'.
o con un pubblico non valido genera uno SecurityTokenInvalidAudienceException
che spiega Message=IDX10214: Audience validation failed. Audiences: '...'. Did not match: validationParameters.ValidAudience: 'null' or validationParameters.ValidAudiences: '...'.
Ho impostato diversi punti di interruzione nel mio Startup.cs
eppure non sono riuscito a catturare una di queste eccezioni prima che vengano lanciate.
Come determinare il motivo specifico per cui una richiesta non è autorizzata utilizzando il middleware owin?
hey @Greg c'è ancora qualche possibilità di gestirlo utilizzando OWIN? –