Рекомендуемый метод / механизм аутентификации для защиты API - PullRequest
0 голосов
/ 24 декабря 2011

Привет и спасибо за поиск.

Фон

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

OAuth - способ пойти по этому пути или есть что-то лучше? Я не буду заранее знать домены сторонних сайтов, поэтому не могу полагаться на заголовки хостов (которые могут быть подделаны в любом случае).

Запросы к API, скорее всего, будут исходить из jQuery или обычного JavaScript на стороне клиента.

Вопрос

Каков наилучший способ обеспечить, чтобы сторонние веб-сайты, запрашивающие данные из моего API, были теми, кем они себя называют, и им был разрешен доступ к запрашиваемой информации?

Большое спасибо!

Мэтт

1 Ответ

1 голос
/ 24 декабря 2011

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

Итак, давайте вернемся назад и зададим вопрос:

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

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

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

...