Создание криптографически безопасных токенов аутентификации

Фон:

Это действительно общий вопрос передового опыта, но некоторые сведения о конкретной ситуации могут быть полезны:

Мы разрабатываем «подключенное» приложение для iPhone. Он будет связываться с серверным приложением через службы REST. Чтобы не запрашивать у пользователя имя пользователя и пароль при каждом запуске приложения, мы предоставим сервис «Логин», который проверяет их имя пользователя и пароль при первом запуске и возвращает токен аутентификации, который может быть использован для будущей сети. запросы на обслуживание для реальных данных. Срок действия токена может истечь, после чего мы попросим их повторно пройти аутентификацию с использованием своего имени пользователя / пароля.

Вопрос:

Каковы рекомендации по созданию токена такого типа для аутентификации?

Например, мы могли бы ...

Хешируйте (SHA-256 и т. Д.) Случайную строку и сохраняйте ее в базе данных для данного пользователя вместе с датой истечения срока действия. Выполните простой поиск токена при последующих запросах, чтобы убедиться, что он совпадает.Зашифруйте идентификатор пользователя и некоторую дополнительную информацию (временную метку и т. Д.) С помощью секретного ключа. Расшифруйте токен при последующих запросах, чтобы убедиться, что он выдан нами.

Такое ощущение, что это должно быть решенной проблемой.