В некоторых контроллерах я хочу авторизовать пользователя по идентификатору компании.
Например, рассмотрим следующий ресурс:
api/v1/companies/1234/orders
Это должно быть доступно только пользователям, принадлежащим к компании 1234.
Обратите внимание, что я использую аутентификацию носителя токена OAuth.
Создание претензии компании в OAuthAuthorizationServerProvider
:
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
//...
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
// Creating the companyId claim
identity.AddClaim(new Claim("CompanyId", user.CompanyId.ToString()));
context.Validated(identity);
}
Текущая реализация controller для ресурса заказов:
[RoutePrefix("api/v1/companies/{companyId:Guid}/orders")]
public class OrdersController : ApiController
{
[Route]
public IHttpActionResult GetOrders(Guid companyId)
{
var orders = OrdersRepository.Get(companyId);
return Ok(orders.Select(x => OrderModel.From(x)));
}
}
Где я могу авторизовать значение URL-адреса companyId для утверждения личности?
Можно ли здесь как-то использовать [Authorize]
?