Значительные различия между Cookies и JWT для родных мобильных приложений

Я использую файлы cookie для проверки подлинности и управления сеансами в своих веб-приложениях и доволен их функциональностью.

Разработчик приложения для iOS представил мне, что новинка - JWT (JSON Web Token). Он сказал мне, что JWT - это способ выполнять аутентификацию и сеансы для собственных мобильных приложений, и, не приводя конкретных примеров, он предположил, что и приложения для iOS, и для Android имеют различные проблемы с файлами cookie.

Так что я посмотрел JWT, например, http://angular-tips.com/blog/2014/05/json-web-tokens-introduction/ и https://auth0.com/blog/2014/01/07/angularjs- authentication-with-cookies-vs-token/, и я не смог понять, почему он значительно лучше (или даже отличается) от Cookies, и, в частности, почему он лучше в родных мобильных приложениях. Кажется, что, по крайней мере, iOS отлично справляется с Cookies (Persisting Cookies в приложении iOS?).

Поэтому мой вопрос заключается в том, что для нативного мобильного приложения, взаимодействующего с серверным API, каковы конкретные преимущества и связанные варианты использования JWT над файлами cookie для аутентификации и сеансов? Пожалуйста, выделите те, которые Cookies просто не могут сделать или делают это намного хуже.

Ответ 1

Мы, разработчики программного обеспечения (иногда), имеем тенденцию применять новую горячую вещь везде, где мы смотрим;это, возможно, вариант поговорки: если все, что у нас есть, это молоток, все выглядит как гвоздь, и в этом случае мы просто испытываем отчаянное желание использовать эту новую вещь, о которой мы узнали.

Интересным моментом в этом сравнении является то, что ни JWT, ни Cookies на самом деле не являются механизмами аутентификации; первый просто определяет формат токена, а второй - механизм управления состоянием HTTP. Только этого достаточно, чтобы дать нам понять, что отстаивать то, что одно лучше другого, неправильно.

Это правда, однако, что оба широко используются в системах аутентификации.

Традиционное серверное веб-приложение использует файлы cookie для отслеживания аутентифицированного пользователя, чтобы они не были обязаны предоставлять свои учетные данные при каждом запросе. Обычно содержимое файла cookie представляет собой (надеюсь) случайно сгенерированный уникальный идентификатор, который сервер будет использовать для поиска данных сеанса, хранящихся на сервере.

Однако для веб-приложений нового типа - API - гораздо чаще принимать токен (в большинстве случаев в формате JWT), чтобы сервер мог решить, должен ли он предоставлять доступ тому, кто делает запрос. Причина этого, возможно, заключается в том, что, хотя у традиционного веб-приложения был один основной тип клиента, веб-браузер, который имеет полную поддержку файлов cookie, API обычно используются гораздо более простыми клиентами HTTP, которые изначально не поддерживают файлы cookie.

Я думаю, именно поэтому мы можем утверждать, что аутентификация на основе токенов имеет больше смысла для собственных мобильных приложений. Эти приложения, как правило, зависят от серверного веб-API, и мы видели, что если API поддерживает токены, это увеличит диапазон клиентов, которые могут его использовать, поэтому это просто наиболее практичная вещь.

В заключение, и чтобы попытаться ответить на ваш конкретный вопрос, я бы сказал, что JWT имеет преимущество перед файлами cookie в нативных мобильных приложениях только потому, что они в настоящее время широко используются, это означает больше ресурсов для обучения, SDK, известные ловушки (в основном потому что кто-то другой уже сделал это и не смог) и т.д.

Тем не менее, используйте их только в том случае, если они дают вам необходимые гарантии безопасности и в конечном итоге упрощают ваш сценарий. Если вы еще не прошли через это, я думаю, вы также оцените Cookies vs Tokens: Полное руководство.

Ответ 2

Я не могу говорить за Android, но на iOS куки работают с URLSession так же хорошо, как и заголовки. Как только вы сможете использовать (стандартное) право API (например, выделенный, правильно сконфигурированный сеанс с хранением файлов cookie для каждого веб-приложения...), iOS будет довольно незначительным фактором для этого решения.