2009-11-04 21 views
40

El otro minuto leí un artículo sobre OAuth. Describió especialmente los tokens intercambiados entre el cliente y el proveedor de servicios durante una serie de solicitudes.Tokens y sesiones de OAuth en RESTO

El artículo también menciona que OAuth gana una popularidad significativa en las API RESTful como capa de autorización. Según entendí, REST debería mantenerse completamente sin estado.

La pregunta: ¿Este token repetido no intercambia el principio de torpedo REST "ser sin estado"? En mi humilde opinión, los tokens se pueden ver como un tipo de identificación de sesión, ¿o no?

Respuesta

76

Los tokens OAuth son explícitamente un identificador de sesión, la interacción no es sin estado entre las solicitudes en el protocolo de negociación de token OAuth ya que las solicitudes se deben realizar en una secuencia específica y requieren almacenamiento por cliente en el servidor según sea necesario. rastrear cosas como cuando fueron emitidas. Entonces sí, OAuth viola los estrictos principios de una arquitectura REST.

Por desgracia, no es el mundo real TM que lidiar con el lugar donde tenemos que hacer cosas como permiten las aplicaciones autenticarse en el nombre de las personas sin solicitar su contraseña, que OAuth hace bastante bien. Sería imposible implementar un esquema de autenticación segura similar sin este tipo de estado. De hecho, uno de los cambios requeridos por OAuth (1.0a) era agregar más al protocolo de negociación de tokens para mitigar un riesgo de seguridad.

Entonces, ¿torpedece el principio sin estado de REST? Sí. ¿Eso importa? No, a menos que viva en una torre de marfil :-)

+11

Me gusta el mundo real (TM). ¡Gracias por la respuesta! – Boldewyn

+6

+1 para llevar el mundo real a REST –

+4

Una vez que se ha procesado la autenticación OAuth, sin embargo, puede ser efectivamente sin estado: el token OAuth es almacenado por el cliente y se envía junto con cada solicitud REST en el encabezado Authorization. –

6

La autenticación es un estado que debe rastrearse de alguna manera cuando se trata de interacciones web. En última instancia, si su aplicación es tranquila o no, el servidor debe poder rastrear el estado autenticado de cada usuario y, lamentablemente, eso requiere algún tipo de elusión de la naturaleza subyacente sin estado de HTTP y cualquier transporte/técnica adicional (como REST) ​​sobre eso.

Por lo tanto, para desarrollar cualquier tipo de aplicación autenticada, un principio de estado debe ser horned shoe en algún lugar, y si eso resulta ser OAuth encima de REST, ¡así es como debe ser!