OAuth, в частности OAuth 2 (который еще не завершен), вероятно, будет работать хорошо для вас.Но поскольку веб-запросы поступают от браузера , а не от веб-сервера, на котором размещены эти веб-сайты, каждый отдельный браузер должен быть авторизован, а не каждый домен.
Итак, давайте вернемся назад и зададим вопрос:
Являются ли данные, которые ваш API будет отображать, уникальными для отдельного пользователя или уникальными для домена веб-сайта?Или, другими словами, собираетесь ли вы как владелец API по контракту авторизовать домены для доступа к вашим данным, или отдельные пользователи будут иметь доступ к данным через ваш API, и эти пользователи должны будут авторизовать эти другие домены для доступа ксвои данные в вашем сервисе?
Если вы авторизуете домены (а не пользователей), то браузер просто не может быть инициатором этих авторизованных запросов к вашему API.Это связано с тем, что веб-серверу в этих доменах придется выдавать клиенту свой секретный ключ, и в этот момент он теряет контроль над ним, и любой может выполнять эти авторизованные вызовы, а не только домены, которые вы намеревались авторизовать.Это принцип «Вы не можете доверять клиенту» в области безопасности.
Если вы авторизуете пользователей, то каждый пользователь, посещающий один из этих сторонних сайтов, должен будет пройти однократную настройку.где веб-сайт перенаправляет свой браузер на ваш сервис, чтобы войти и сказать «да, [сторонний сайт] может получить доступ к моим данным», после чего они перенаправляются обратно на этот сайт.После этого каждый раз, когда они посещают этот сайт, он может загрузить секретный ключ, который является уникальным для этого пользователя и может использоваться из клиентского javascript для выполнения этих авторизованных вызовов API.