Intereting Posts
Как издеваться над сервисом Symfony 2 в функциональном тесте? Проверьте, существует ли имя пользователя с помощью PHP PDO CakePHP: как использовать элемент вида внутри контроллера Как проверить cookie с другого сайта в php и не разрешать доступ к mywebsite? Перестановка массива в PHP Параметры в выражении выбора DQL (Symfony2 / Doctrine) Как получить год и месяц с даты – PHP $ this-> db-> insert_id (); возвращая 0 каждый раз в codeigniter php / mysql – иностранные символы Как использовать сеансы PHP с клиентским приложением REST? Конвертировать * (mp3, m4p и т.п.) в OGG через командную строку для совместимости с HTML5 Есть ли способ использовать пакеты загрузки Composer без документов и тестирования? Могу ли я заставить RecursiveDirectoryIterator пропускать нечитаемые каталоги? Проверьте, действителен ли открытый ключ GPG / PGP Есть ли бесплатный / открытый исходный эквивалент менеджеров списков рассылки, таких как MailChimp или ConstantContact и т. Д.?

Руководство по внедрению сервера Oauth2 PHP с использованием библиотеки

Я использую Slim Framework с Eloquent ORM . Попытка реализовать https://github.com/thephpleague/oauth2-server, но я совершенно смущен, как это сделать. После добавления этого с композитором я создал базу данных с sql-файлом, представленным в этом пакете.

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

Также неясно, как изначально выложить db. Вот мой маршрутизатор, где я пытаюсь использовать метод password .

 $server = new \League\OAuth2\Server\AuthorizationServer; $server->setSessionStorage(new SessionStorage); $server->setAccessTokenStorage(new AccessTokenStorage); $server->setClientStorage(new ClientStorage); $server->setScopeStorage(new ScopeStorage); $passwordGrant = new \League\OAuth2\Server\Grant\PasswordGrant(); $passwordGrant->setVerifyCredentialsCallback(function ($username, $password) { // implement logic here to validate a username and password, return an ID if valid, otherwise return false return 1; }); $server->addGrantType($passwordGrant); $app->post('/token',function() use ($server,$app){ try{ $response = $server->issueAccessToken(); $res = $app->response(); $res['Content-Type'] = 'application/json'; $res->body(json_encode($response)); } catch (\Exception $e) { var_dump($e); } }); 

Я полностью расстроен, что происходит. Это вызывает следующее исключение. [Я добавил область ok в db]

 object(League\OAuth2\Server\Exception\InvalidScopeException)[82] public 'httpStatusCode' => int 400 public 'errorType' => string 'invalid_scope' (length=13) public 'serverShouldRedirect' => boolean true protected 'message' => string 'The requested scope is invalid, unknown, or malformed. Check the "ok" scope.' (length=76) private 'string' (Exception) => string '' (length=0) protected 'code' => int 0 protected 'file' => string 'C:\wamp\www\linkshare\vendor\league\oauth2-server\src\Grant\AbstractGrant.php' (length=77) protected 'line' => int 163 private 'trace' (Exception) => array (size=11) 0 => array (size=6) 'file' => string 'C:\wamp\www\linkshare\vendor\league\oauth2-server\src\Grant\PasswordGrant.php' (length=77) 'line' => int 130 'function' => string 'validateScopes' (length=14) 'class' => string 'League\OAuth2\Server\Grant\AbstractGrant' (length=40) 'type' => string '->' (length=2) 'args' => array (size=2) ... 1 => array (size=6) 'file' => string 'C:\wamp\www\linkshare\vendor\league\oauth2-server\src\AuthorizationServer.php' (length=77) 'line' => int 330 'function' => string 'completeFlow' (length=12) 'class' => string 'League\OAuth2\Server\Grant\PasswordGrant' (length=40) 'type' => string '->' (length=2) 'args' => array (size=0) ... 2 => array (size=6) 'file' => string 'C:\wamp\www\linkshare\index.php' (length=31) 'line' => int 67 'function' => string 'issueAccessToken' (length=16) 'class' => string 'League\OAuth2\Server\AuthorizationServer' (length=40) 'type' => string '->' (length=2) 'args' => array (size=0) ... 3 => array (size=2) 'function' => string '{closure}' (length=9) 'args' => array (size=0) ... 4 => array (size=4) 'file' => string 'C:\wamp\www\linkshare\vendor\slim\slim\Slim\Route.php' (length=53) 'line' => int 462 'function' => string 'call_user_func_array' (length=20) 'args' => array (size=2) ... 5 => array (size=6) 'file' => string 'C:\wamp\www\linkshare\vendor\slim\slim\Slim\Slim.php' (length=52) 'line' => int 1326 'function' => string 'dispatch' (length=8) 'class' => string 'Slim\Route' (length=10) 'type' => string '->' (length=2) 'args' => array (size=0) ... 6 => array (size=6) 'file' => string 'C:\wamp\www\linkshare\vendor\slim\slim\Slim\Middleware\Flash.php' (length=64) 'line' => int 85 'function' => string 'call' (length=4) 'class' => string 'Slim\Slim' (length=9) 'type' => string '->' (length=2) 'args' => array (size=0) ... 7 => array (size=6) 'file' => string 'C:\wamp\www\linkshare\vendor\slim\slim\Slim\Middleware\MethodOverride.php' (length=73) 'line' => int 92 'function' => string 'call' (length=4) 'class' => string 'Slim\Middleware\Flash' (length=21) 'type' => string '->' (length=2) 'args' => array (size=0) ... 8 => array (size=6) 'file' => string 'C:\wamp\www\linkshare\vendor\slim\slim\Slim\Middleware\PrettyExceptions.php' (length=75) 'line' => int 67 'function' => string 'call' (length=4) 'class' => string 'Slim\Middleware\MethodOverride' (length=30) 'type' => string '->' (length=2) 'args' => array (size=0) ... 9 => array (size=6) 'file' => string 'C:\wamp\www\linkshare\vendor\slim\slim\Slim\Slim.php' (length=52) 'line' => int 1271 'function' => string 'call' (length=4) 'class' => string 'Slim\Middleware\PrettyExceptions' (length=32) 'type' => string '->' (length=2) 'args' => array (size=0) ... 10 => array (size=6) 'file' => string 'C:\wamp\www\linkshare\index.php' (length=31) 'line' => int 131 'function' => string 'run' (length=3) 'class' => string 'Slim\Slim' (length=9) 'type' => string '->' (length=2) 'args' => array (size=0) 

Solutions Collecting From Web of "Руководство по внедрению сервера Oauth2 PHP с использованием библиотеки"

OAuth 2.0 очень сложно понять и использовать правильно. Фактически, лидер OAuth 2.0 классно отошел от протокола после многих лет его разработки . По словам Эрана Хаммера (вышеупомянутого ведущего разработчика):

По сравнению с OAuth 1.0 спецификация 2.0 более сложна, менее интероперабельная, менее полезная, более неполная и, самое главное, менее безопасная.

Чтобы быть ясным, OAuth 2.0, находящийся в руках разработчика с глубоким пониманием веб-безопасности, скорее всего, является безопасной реализацией. Однако в руках большинства разработчиков – как и опыт последних двух лет – 2.0, вероятно, создаст небезопасные реализации.

Поэтому, разумеется, есть несколько утверждений о OAuth 2.0. Алекс Билби, ведущий разработчик платформы OAuth 2.0-Server PHP League, кажется одним из наиболее знающих разработчиков для OAuth 2.0, хотя, несомненно, больше. Тем не менее, имея в виду одну из больших жалоб Хаммера – отсутствие функциональной совместимости и полноты, вы, вероятно, захотите найти следующее в реализации OAuth 2.0:

  • Активная разработка
  • Полное соответствие OAuth 2.0

Я лично использую и рекомендую OAuth 2.0-сервер Alex Bilbie, который теперь включает маркеры MAC-маркеров и имеет целью полностью соответствовать требованиям. Он также находится в активном развитии.

Итак, что это значит для вашего проекта? Прочитайте спецификации. Пакет, который мы используем, утверждает, что он полностью соответствует требованиям, что означает, что ваш лучший ресурс – это сама спецификация OAuth 2.0 . Существует также достойная документация на веб-сайте Лиги PHP, которая может помочь вам в этой конкретной реализации.

При этом вам может не хватать Scope для вашей комбинации клиент / пользователь. Способ OAuth2.0 структурирован, ваш пользователь должен принимать области, которые запрашивает клиент. Это означает, что ваши «области» необходимо связать в других таблицах. Если «ОК» не одобрено пользователем (в БД), оно не будет одобрено.

редактировать

Звуки, как области, не проблема для вас. Это место плохо подходит для устранения неполадок, поэтому я советую вам убедиться, что у вас самая последняя версия любой структуры, которую вы решили использовать, и сообщать об ошибках разработчику (с PHPLeague, через Github).