authentication - Proxy de almacenamiento en caché con solicitudes REST autenticadas
caching-proxy (2)
Considere el siguiente escenario:
- Tengo RESTful URL / articles that returns list of articles
- el usuario proporciona sus credenciales usando el encabezado HTTP de Autorización en cada solicitud
- los artículos pueden variar de usuario a usuario según sus privilegios
Es posible usar el proxy de almacenamiento en caché, como Squid, para este escenario? Proxy solo verá URL / artículos, por lo que puede devolver una lista de artículos solo válidos para el primer usuario que genere el caché. Otros usuarios que solicitan URL / artículos pueden ver artículos a los que no tienen acceso, lo cual no es deseable, por supuesto.
¿Debo pasar mi propio caché o algún software proxy de caché puede configurarse para basar su caché en el encabezado HTTP de Autorización?
Por el HTTP / 1.1 RFC sección 14.8 ( http://tools.ietf.org/html/rfc2616#section-14.8 ):
When a shared cache (see section 13.7) receives a request
containing an Authorization field, it MUST NOT return the
corresponding response as a reply to any other request, unless one
of the following specific exceptions holds:
1. If the response includes the "s-maxage" cache-control
directive, the cache MAY use that response in replying to a
subsequent request. But (if the specified maximum age has
passed) a proxy cache MUST first revalidate it with the origin
server, using the request-headers from the new request to allow
the origin server to authenticate the new request. (This is the
defined behavior for s-maxage.) If the response includes "s-
maxage=0", the proxy MUST always revalidate it before re-using
it.
2. If the response includes the "must-revalidate" cache-control
directive, the cache MAY use that response in replying to a
subsequent request. But if the response is stale, all caches
MUST first revalidate it with the origin server, using the
request-headers from the new request to allow the origin server
to authenticate the new request.
3. If the response includes the "public" cache-control directive,
it MAY be returned in reply to any subsequent request.
Una posibilidad para probar es utilizar el encabezado de respuesta Vary: Authorization
para indicar a los cachés en sentido descendente que tengan cuidado con el almacenamiento en caché variando los documentos almacenados en caché según el encabezado Authorization
la solicitud.
Es posible que ya esté usando este encabezado si usa la compresión de respuesta. El usuario generalmente solicita un recurso con el encabezado Accept-Encoding: gzip, deflate
; si el servidor está configurado para admitir la compresión, entonces la respuesta podría venir con los encabezados Content-Encoding: gzip
y Vary: Accept-Encoding
ya.