Защита API REST, написанного на PHP, с помощью учетных данных клиента OAuth2
============================================================================

Я пишу REST API в PHP, используя Symfony2. Этот API предназначен для использования отдельными веб-сайтами для доступа к данным, и это будет выполняться библиотекой на стороне клиента.

Мне нужно защитить API, но это немного запутанно. Я провел некоторое исследование, и, насколько я могу судить, хорошим способом является использование OAuth2 с потоком учетных данных клиента (см. Проект RFC). Должен признаться, я все еще неясен в деталях, как именно это работает, но я продолжаю читать, что это так просто. Я полагаю, что мой первый вопрос: это путь или я пошел в неправильном направлении? Должен ли я использовать какой-либо другой метод аутентификации клиентов? Пожалуйста, имейте в виду, что мне нужна идентификация, аутентификация и авторизация.

Если да, OAuth2 с использованием учетных данных клиента - это способ, то я спрашиваю: какой лучший способ сделать это в PHP? Кто-нибудь на самом деле это сделал? До сих пор я пытался использовать [oauth2-php](https://github.com/FriendsOfSymfony/oauth2-php) вместе с [bundle](https://github.com/FriendsOfSymfony/FOSOAuthServerBundle) без лишней удачи. Этот пакет, похоже, сосредоточен на трехсторонней аутентификации, хотя я не совсем уверен. Мне было интересно, может ли лучший способ действий сделать это вручную с помощью пакета oauth2-php?

Я был бы очень признателен за любую информацию об этом. Спасибо заранее!

 

Heidar,

В настоящее время я работаю над подобным проектом, и это то, что я нашел до сих пор.

Oauth официально разрешает веб-сайт с другим ресурсом в Интернете, Facebook обнаружил, что все разделение авторизации и аутентификации запутывается для базы разработчиков, и начал использовать Oauth для обоих. С тех пор его основные разработчики игроков отмечают.

Несмотря на то, что я не совсем уверен, что вы подразумеваете под частью Identity в своем заявлении, вам нужно "личность, аутентификация и авторизация".

Вы можете использовать Oauth для двух других, вычитаемый из того факта, что все крупные интернет-компании делают это (лучше всего я могу сделать для вас на этом фронте, Oauth docs говорит, что это только для авторизации).

 (function(w, d, n, s, t) {
 w[n] = w[n] || [];
 w[n].push(function() {
 Ya.Context.AdvManager.render({
 blockId: "R-A-248011-3",
 renderTo: "yandex\_rtb\_R-A-248011-3",
 async: true
 });
 });
 t = d.getElementsByTagName("script")[0];
 s = d.createElement("script");
 s.src = "//an.yandex.ru/system/context.js";
 s.async = true;
 t.parentNode.insertBefore(s, t);
 })(this, this.document, "yandexContextAsyncCallbacks");

Google предлагает клиентскую библиотеку, которая поддерживается достаточно хорошо: [http://code.google.com/p/google-api-php-client/wiki/OAuth2](https://code.google.com/p/google-api-php-client/wiki/OAuth2)

еще больше, для библиотеки на стороне сервера я бы перешел на oauth2-php, на что вы ссылаетесь, на <https://github.com/quizlet/oauth2-php> Но, пожалуйста, смотрите это post для более подробной информации: [Существуют ли версии PHP или Java на стороне сервера OAuth 2?](/questions/429716/are-there-oauth-2-server-side-php-or-java-implementations)

и со стороны трехзначной аутентификации, пожалуйста, см. ответ здесь (он действительно обширный, но хорошо объясняет) [OAuth 2.0: Преимущества и варианты использования - почему?](/questions/30849/oauth-20-benefits-and-use-cases-why)

Пожалуйста, имейте в виду, что я все еще борется с реализацией этого.