Как защитить веб-службы 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 и многих других сервисов.