Verificação de autorização para caches HTTP
Eu tenho o método de API da Web listado abaixo, para umaREST
serviço. Isto é para obter todas as informações de usuários para InventoryAuditors. Somente usuários autorizados do InventoryAuditor podem acessar esse recurso.
[RoutePrefix("api/users")]
public class UsersController : ApiController
{
[Authorize(Roles="InventoryAuditor")]
[Route("")]
[HttpGet]
public List<User> GetAllUsers()
{
//Return list of users
}
}
public class User
{
public int UserID { get; set; }
public string FirstName { get; set; }
}
Questões
Esse recurso pode ser armazenado em cache parashared caches
(gostarForward Proxies
e outros caches intermediários)?Se sim, como o cache compartilhado executa a verificação de autorização - como o cache sabe que o recurso deve ser servido apenas para InventoryAuditors?Como devem ser os cabeçalhos para tornar esta representação autorizada armazenável em cache?Ou éHTTP Caching
nem todos devem ser utilizados em caso de recursos autorizados?
Nota: O artigo"Tutorial de armazenamento em cache para autores e webmasters da Web" diz:
Por padrão, as páginas protegidas com autenticação HTTP são consideradas privadas; eles não serão mantidos por caches compartilhados. No entanto, você pode tornar públicas as páginas autenticadas com um cabeçalho Cache-Control: public; Os caches compatíveis com HTTP 1.1 permitirão que eles sejam armazenados em cache.
REFERÊNCIAS
https://tools.ietf.org/html/rfc7235#section-4.2https://tools.ietf.org/html/rfc7234#section-3.2https://tools.ietf.org/html/rfc7234#section-5.2.2Protocolo de transferência de hipertexto (HTTP / 1.1): Armazenamento em cacheCaracterística: Autenticação de Portador - LulaTruques estúpidos de cache da Web