Пользовательский ответ для авторизации на основе политикC#

Место общения программистов C#
Ответить
Anonymous
 Пользовательский ответ для авторизации на основе политик

Сообщение Anonymous »

У меня есть обработчик авторизации, но в случае сбоя я хочу, чтобы ответ имел код 401 с телом ответа.

Код: Выделить всё

    public class TokenValidationAuthorizationHandler: AuthorizationHandler
{
private readonly IHttpContextAccessor _httpContextAccessor;

public TokenValidationAuthorizationHandler(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, TokenValidationCustomRequirement requirement)
{
var httpContext = context.Resource as DefaultHttpContext;
if (httpContext == null)
{
context.Fail();

}

var authHead =  httpContext.Request.Headers.Authorization;
var bearerToken = TokenHelper.GetToken(authHead.ToString());
if (string.IsNullOrEmpty(bearerToken))
{
context.Fail();
}
else
{
context.Succeed(requirement);
}

return Task.CompletedTask;
}
}
Даже если контекст завершился неудачно или успешно, авторизацияResult.Succeeded и авторизацияResult.Forbidden в приведенном ниже коде всегда возвращают значение false.

Код: Выделить всё

    public class TokenValidationAuthorizationMiddlewareResultHandler : IAuthorizationMiddlewareResultHandler
{
public Task HandleAsync(RequestDelegate next, HttpContext httpContext, AuthorizationPolicy policy, PolicyAuthorizationResult authorizeResult)
{
if (authorizeResult.Challenged || authorizeResult.Forbidden)
{
var response = new BadRequestResponse("Forbidden");
httpContext.Response.StatusCode = 401;
httpContext.Response.ContentType = "application/json";
return httpContext.Response.WriteAsync(JsonConvert.SerializeObject(response));
}

return next(httpContext);
}
}

Что не так в этом коде и каково реальное решение?

Подробнее здесь: https://stackoverflow.com/questions/783 ... horization
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»