Разработка API – как сделать его защищенным?

Я собираю методы чтения и записи в свою базу данных и выставляю их по URL-адресу (я использую структуру CodeIgniter и используя сегменты URL для передачи параметров этим методам). Первоначальная идея заключалась в том, чтобы мой сценарий Ajax вызывал эти методы. Однако теперь я думаю, что могу потенциально разоблачить эти методы для любого разработчика.

Что я должен сделать, чтобы убедиться, что только авторизованные разработчики используют мой API? Я думаю, что они должны передать ключ API и, возможно, пароль для каждого вызова метода. Если бы я предоставил им такие данные, это было бы достаточно безопасным?

Кроме того, я думаю, что я должен поддерживать POST вместо GET, так как некоторые из требуемых параметров могут не соответствовать друг другу с помощью сегментов URL. Мысли?

Внедрение OAuth http://oauth.net/documentation/getting-started/ будет работать для того, что вы пытаетесь сделать. Я не уверен, какой тип данных вы обеспечиваете, но я согласен с TradyBlix в этом, наверное, лучше. Я реализовал его раньше, это не так сложно понять, он хорошо документирован многими API-интерфейсами, которые обрабатывают пользовательские данные, используя его.

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

Во-первых: требуется HTTPS .

HTTPS гарантирует, что безопасный канал будет установлен до отправки любых данных запроса. Да, перед отправкой любых данных запроса: URL, заголовки, файлы cookie, параметры GET или POST … что угодно. Это означает, что вы можете использовать простые методы, такие как HTTP Basic authentication over HTTPS, не подвергая учетные данные пользователя риску.

Это действительно не подлежит обсуждению, если данные, которые вы передаете через API, действительно публичны. Если вы не используете HTTPS, любая коммуникация с вашим API (включая учетные данные HTTP Basic) может быть обнюхана простым текстом.

Единственная причина, по которой крупные сайты (например, Facebook) не используют HTTPS, потому что она становится дорогой в массовом масштабе.

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

Во-вторых: аутентификация не является авторизацией .

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

Это намного больше, чем это, но если вы будете следовать этим двум принципам, вы уже в пути.

Может быть, вы должны проверить OAuth . Это An open protocol to allow secure API authorization in a simple and standard method from desktop and web applications.

Я сам не пробовал себя честно, но это первое, о чем я думал, когда вы упомянули, что authorized developers use my API . Просто идея.