Mam ap ASPIX 4.5 web api działający przy użyciu owin. Ilekroć nieuprawniona jest wniosek zwraca 401 z następującej odpowiedzi zgodnie z oczekiwaniami:Powracające opisowe wiadomości 401 od Owin WebApi2
{"Message":"Authorization has been denied for this request."}
Chciałbym dodać dodatkowe szczegóły do tej odpowiedzi (wygasł tokena, nieważne roli, etc ...) i wdrożony zwyczaj [AuthorizeAttribute]
na podstawie tego 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;
}
}
a następnie użył go na moich kontrolerami tak:
[MyAuthorizeAttribute(Roles = "Foo")]
public class MyController : ApiController
{
...
}
która zwraca 401 z następującej odpowiedzi zgodnie z oczekiwaniami:
{"Description": "This is why you're unauthorized"}
Ja jednak nie widzę w jaki sposób określić przyczynę żądania nieautoryzowanego z HttpActionContext
przekazanego do MyAuthorizeAttribute.HandleUnauthorizedRequest
. Na przykład, gdy debuguję lokalnie i wysyłam żądanie z wygasłym tokenem, generuje on komunikat SecurityTokenExpiredException
wyjaśniający IDX10223: Lifetime validation failed. The token is expired. ValidTo: '...' Current time: '...'.
lub z nieprawidłową publicznością, który wyrzuca SecurityTokenInvalidAudienceException
wyjaśniając Message=IDX10214: Audience validation failed. Audiences: '...'. Did not match: validationParameters.ValidAudience: 'null' or validationParameters.ValidAudiences: '...'.
Ustawiłem kilka punktów przerwania w moim Startup.cs
, ale nie byłem w stanie nawet złapać jeden z tych wyjątków, zanim zostaną rzucone.
Jak określić konkretny powód, dla którego żądanie jest nieautoryzowane za pomocą oprogramowania pośredniczącego owin?
hej @Greg czy istnieje szansa na obsłużenie tego przy użyciu OWIN? –