Cookies против Access Token для безопасности API - PullRequest
0 голосов
/ 01 марта 2019

Я разрабатываю API и поэтому ищу решение для его защиты.Я наткнулся на эту статью: https://github.com/alexbilbie/alexbilbie.github.com/blob/master/_posts/2014-11-11-oauth-and-javascript.md

, которая старая, но я думаю, что она все еще актуальна.Однако есть кое-что, чего я не очень понимаю, так как я все еще новичок в этом.

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

Я не понимаю, почему это так безопасно.В обоих случаях, как только злоумышленник украл токен доступа или cookie, все готово.Не так ли?

Я что-то упустил?

Большое вам спасибо.

1 Ответ

0 голосов
/ 02 июля 2019

Нет особого преимущества в том, что прокси-сервер выступает в роли Доверяющей стороны и скрывает там маркеры доступа.

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

(Этоэто еще большая проблема для приложений, которые имеют длинные сеансы, которые длятся несколько часов или дней или более.)

Единственные незначительные преимущества, которые я вижу при таком подходе:

  • Это позволяет вамначать создавать OAuth2 / OIDC-совместимые API на стороне сервера, а не использовать проверку подлинности на основе файлов cookie, что может помочь в сценариях миграции / повышения производительности в сложных средах.
  • Подход с использованием файлов cookie можно использовать со сторонними приложениямиили библиотеки, которые по какой-либо причине не могут поддерживать OAuth2 / OIDC.(Но, возможно, вам следует держаться подальше от них, если они не могут быть должным образом защищены.)

Если вы хотите защитить токен доступа на клиенте, я бы предложил один из более безопасных подходов.будет хранить его как переменную в вашем приложении (то есть в памяти) и НЕ сохранять его в локальном хранилище или хранилище сеанса.Это останавливает доступ к нему через JavaScript из другого приложения, и вы полностью контролируете, когда токен доступа передается в API, в отличие от файла cookie, который прозрачно обрабатывается браузером.

...