Как защитить веб-службы RESTful?

Мне нужно реализовать безопасные веб-службы RESTful. Я уже проводил некоторые исследования с использованием Google, но я застрял.

Параметры:

TLS (HTTPS) +

Можно ли рассмотреть более возможные варианты? Если OAuth тогда какая версия? Это даже имеет значение? Из того, что я читал до сих пор OAuth 2.0 с токенами-носителями (то есть без подписи), кажется, небезопасным.

Я нашел еще одну очень интересную статью о аутентификации на основе REST.

Защитите свой REST API... Правильный путь

Ответ 1

Там другой, очень безопасный метод. Это клиентские сертификаты. Знаете, как серверы представляют SSL-сертификат, когда вы связываетесь с ними по https? Серверы скважин могут запрашивать сертификат у клиента, чтобы они знали, что клиент - это тот, кто они говорят. Клиенты генерируют сертификаты и передают их вам по защищенному каналу (например, приходят в ваш офис с помощью USB-ключа - предпочтительно не троянный USB-ключ).

Вы загружаете открытый ключ сертификатов клиента cert (и их сертификатов подписей), если это необходимо) на ваш веб-сервер, и веб-сервер не будет принимать подключения ни от кого, кроме люди, у которых есть соответствующие секретные ключи для сертификатов, о которых он знает. Он работает на уровне HTTPS, поэтому вы даже можете полностью пропустить аутентификацию на уровне приложения, такую ​​как OAuth (в зависимости от ваших требований). Вы можете абстрагировать слой и создать локальный центр сертификации и подписывать запросы на сертификаты от клиентов, что позволяет вам пропустить шаги "заставить их войти в офис" и "загрузить сертификаты на сервер".

Боль шеи? Абсолютно. Хорошо для всего? Неа. Очень безопасно? Ага.

Он полагается на то, что клиенты сохраняют свои сертификаты в безопасности (они не могут публиковать свои секретные ключи в Интернете), и обычно они используются, когда вы продаете услугу клиентам, а не позволяете зарегистрировать и подключиться.

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

Ответ 2

HTTP Basic + HTTPS - один из распространенных методов.

Ответ 3

Если вы выбираете между версиями OAuth, перейдите к OAuth 2.0.

Тонеры жетонов OAuth должны использоваться только с безопасным транспортом.

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

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

Если вам нужно защищать полезную нагрузку, которая проходит через нескольких участников, вам нужно что-то большее, чем HTTPS/SSL, поскольку HTTPS/SSL шифрует только одну ссылку на график. Это не ошибка OAuth.

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