Soy consciente de que existen principalmente dos enfoques para la autenticación: sesiones y tokens. Y para las sesiones, supongo que la identificación de la sesión normalmente se almacena en la cookie que se envía junto con cada solicitud posterior. Y para tokens, por ejemplo, JWT, normalmente es una cadena agregada al encabezado de autorización con el prefijo de bearer en el encabezado HTTP.
Mi primera pregunta: para las API que utiliza el front-end para realizar CRUD en recursos protegidos en nombre del usuario que inició sesión, ¿debería userId de usuario ser parte de la firma de la API? En otras palabras, ¿los desarrolladores de frontend deben pasar el userId de usuario cuando realizan esas llamadas a la API? Por ejemplo, tengo un punto final de API para actualizar un recurso
UpdateTask(userId?: string, taskId: string, updatedTaskConfig: TaskConfig): Task - POST /v1/tasks/:id ¿Deberíamos omitir el ID de userId ya que el ID de la sesión o el token (depende del enfoque de autenticación que elijamos) será suficiente para que el backend identifique qué usuario envía esta solicitud? ¿O todavía tenemos que incluirlo?
Otra pregunta relacionada es que soy consciente de que tanto los JWT como los ID de sesión se pueden enviar a través de múltiples vías (cookies, encabezados, cuerpos de solicitud, URL, etc.). ¿Afecta eso a la API en la inclusión del userId de usuario?
Mi segunda pregunta es, para cualquier operación CRUD, ¿las llamadas API deben incluir una timestamp de tiempo generada en la interfaz? ¿O debería generarse en el backend ya que las llamadas a la API pueden fallar debido a una serie de razones para que tenga más sentido dejar que el backend genere la marca de tiempo?