Generando tokens de autenticación criptográficamente seguros

Antecedentes

Esta es realmente una pregunta general de mejores prácticas, pero algunos antecedentes sobre la situación específica podrían ser útiles:

Estamos desarrollando una aplicación "conectada" para iPhone. Se comunicará con la aplicación de fondo a través de los servicios REST. Para no tener que pedirle al usuario un nombre de usuario y contraseña cada vez que inicie la aplicación, expondremos un servicio de "Inicio de sesión" que valida su nombre de usuario y contraseña en el inicio inicial y devuelve un token de autenticación que se puede utilizar para la web en el futuro. solicitudes de servicio para datos reales. El token puede tener un tiempo de vencimiento después del cual les pediremos que se vuelvan a autenticar con su nombre de usuario / contraseña.

La pregunta

Cuáles son las mejores prácticas para generar este tipo de token para la autenticación?

Por ejemplo, podríamos ...

Hash (SHA-256, etc.) una cadena aleatoria y la almacena en la base de datos para el usuario dado junto con una fecha de vencimiento. Realice una búsqueda simple del token en solicitudes posteriores para asegurarse de que coincida. Encripte la identificación de usuario y alguna información adicional (marca de tiempo, etc.) con una clave secreta. Descifre el token en solicitudes posteriores para asegurarse de que lo emitimos nosotros.

Esto parece que debe ser un problema resuelto.

Respuestas a la pregunta(14)

Su respuesta a la pregunta