я использую Slim Framework
С Eloquent ORM
. Пытаясь реализовать https://github.com/thephpleague/oauth2-server но я совершенно запутался, как это сделать. После добавления этого с помощью composer я создал базу данных с файлом sql, предоставленным в этом пакете.
Теперь предлагается реализовать интерфейсы хранения. Я не хочу этого делать, поэтому я просто скопировал классы хранения, найденные в папке примеров. Я думаю, они должны работать, так как я использую ту же базу данных, верно?
Также неясно, как изначально посеять БД. Вот мой роутер, где я пытаюсь 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
в дБ]
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)
OAuth 2.0 очень сложно понять и правильно использовать. На самом деле, лидер OAuth 2.0 классно ушел от протокола после нескольких лет разработки для него. По словам Эрана Хаммера (вышеупомянутого ведущего разработчика):
По сравнению с OAuth 1.0 спецификация 2.0 является более сложной,
менее совместимый, менее полезный, более неполный и наиболее
главное, менее безопасно.Чтобы быть ясным, OAuth 2.0 от руки разработчика с глубоким
понимание веб-безопасности, скорее всего, приведет к
реализация. Тем не менее, в руках большинства разработчиков — как это было
опыт последних двух лет — 2.0, скорее всего, даст
небезопасные реализации.
Излишне говорить, что в OAuth 2.0 есть некоторые разногласия. Алекс Билби, ведущий разработчик платформы OAuth 2.0-сервера PHP League, по-видимому, является одним из наиболее знающих разработчиков для OAuth 2.0, хотя, несомненно, есть и другие. Тем не менее, имея в виду одну из самых больших жалоб Hammer — отсутствие функциональной совместимости и полноты — вы, вероятно, захотите найти следующее в реализации OAuth 2.0:
Я лично использую и рекомендую OAuth 2.0-сервер Алекса Билби, который теперь включает в себя токены-носители MAC и нацелен на полную совместимость. Также активно развивается.
Итак, что это значит для вашего проекта? Читайте о спецификациях. Пакет, который мы используем, претендует на полную совместимость, что означает, что ваш лучший ресурс Спецификация OAuth 2.0 сам. Есть также достойная документация под Сайт PHP Лиги это может помочь вам с этой конкретной реализацией.
При этом, возможно, вам не хватает Scope для вашей комбинации клиент / пользователь. Как OAuth2.0 структурирован, ваш пользователь должен принимать области, которые запрашивает клиент. Это означает, что ваши «области видимости» должны быть связаны в других ваших таблицах. Если «ОК» не одобрено пользователем (в БД), то оно не будет одобрено.
Похоже, прицелы не проблема для вас. Это место не очень подходит для устранения неполадок, поэтому я советую вам убедиться, что у вас установлена самая последняя версия любой среды, которую вы решите использовать, и сообщать о любых ошибках разработчику (в PHPLeague это происходит через Github).
Прошло довольно много лет с тех пор, как этот вопрос был задан, но вот ссылки на библиотеки OAuth2 для Slim 3: