У меня есть две политики: ApiUser и CompanyBased. когда я использую политику, основанную на компании ([Authorize (Policy = "CompanyBased")]
) приложению не удалось проверить токен JWT. Когда я использую [Authorize], он работает хорошо, токен проверяется ...
Версия: ядро 2.2
Microsoft.AspNetCore.Authorization.DefaultAuthorizationService [2]
Авторизация не удалась.
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker [3]
Авторизация не выполнена для запроса в фильтре «Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter».
Microsoft.AspNetCore.Mvc.ForbidResult [1]
Выполнение ForbidResult со схемами аутентификации ().
Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler [13]
Схема аутентификации: предъявитель был запрещен.
// api user claim policy
services.AddAuthorization(options =>
{
options.AddPolicy("ApiUser", policy => policy.RequireClaim(Constants.Strings.JwtClaimIdentifiers.Rol, Constants.Strings.JwtClaims.ApiAccess));
options.AddPolicy("CompanyBased", policy =>
{
policy.RequireClaim(Constants.Strings.JwtClaimIdentifiers.Rol, Constants.Strings.JwtClaims.ApiAccess);
policy.AddRequirements(new CompanyBasedRequirement());
});
});
Это компания BaseHandler
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, CompanyBasedRequirement requirement)
{
#region Validate Company id
Guid? companyId = _httpContextAccessor.HttpContext.Request.Headers.GetCompanyId();
string nameIdentifier = context.User.FindFirstValue(ClaimTypes.NameIdentifier);
if (companyId is null)
{
_logger.LogInformation($"No company suppied for {nameIdentifier}");
context.Fail();
}
else
{
if (!_clientRepository.IsClientValid(companyId.Value, nameIdentifier))
{
_logger.LogInformation($"{companyId} does not belong to {nameIdentifier}");
context.Fail();
}
else
{
context.Succeed(requirement);
}
}
#endregion Validate Company id
return Task.CompletedTask;
}
- Как убедиться, что CompanyBased проверяет токен JWT
- Могу ли я сделать HandleRequirementAsync Async с помощью await, я застрял с возвратом await Task.CompletedTask (который не работает)!