Проблема интеграции Zend-expressive-authentication-oauth с HTTP 500 - PullRequest
0 голосов
/ 15 июня 2019

Я очень новичок в Zend-Expressive и использовал скелет приложение в качестве точки входа. Теперь я хочу защитить свой API с помощью zend-expressive-authentication-oauth2 и у меня есть некоторые проблемы, чтобы заставить его работать. Система PHP 7.2 (Debian) и все пакеты, установленные через composer в последних версиях.
Я следовал инструкциям по установке и настройке модуля: я создал файлы * .key в data/oauth, использовал сценарий SQL для создания таблиц базы данных и внес изменения в конфигурации приложения.
Что происходит, я получаю ошибку HTTP 500, если я вызываю следующий URL в браузере:

example.com/api/ping

И то же самое, если я отправляю учетные данные клиента на URL:

example.com/oauth2/token

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

конфиг / config.php

$aggregator = new ConfigAggregator([
    \Zend\Expressive\Authentication\ConfigProvider::class,
    // ...
    MyProject\Api\ConfigProvider::class,
    new PhpFileProvider(realpath(__DIR__) . '/autoload/{{,*.}global,{,*.}local}.php'),
], $cacheConfig['config_cache_path']);

конфиг / автозагрузки / dependencies.global.php

<?php

declare(strict_types=1);

use Zend\Expressive\Authentication;

return [
    'dependencies' => [
        'aliases' => [
            Authentication\AuthenticationInterface::class => Authentication\OAuth2\OAuth2Adapter::class,
        ],
        'invokables' => [
        ],
        'factories'  => [
        ],
    ],
];

конфиг / автозагрузки / oauth2.global.php

<?php

declare(strict_types=1);

use League\OAuth2\Server\Grant;

return [
    'authentication' => [
        'private_key' => dirname(__DIR__) . '/../data/oauth/private.key',
        'public_key' => dirname(__DIR__) . '/../data/oauth/public.key',
        'encryption_key' => require dirname(__DIR__) . '/../data/oauth/encryption.key',

        'access_token_expire' => 'P1D',
        'refresh_token_expire' => 'P1M',
        'auth_code_expire' => 'PT10M',

        'pdo' => [
            'dsn' => sprintf(
                'mysql:dbname=%s;host=%s',
                false !== getenv('MYSQL_DB_NAME') ? getenv('MYSQL_DB_NAME') : '',
                false !== getenv('MYSQL_DB_HOST') ? getenv('MYSQL_DB_HOST') : ''
            ),
            'username' => false !== getenv('MYSQL_DB_USER') ? getenv('MYSQL_DB_USER') : '',
            'password' => false !== getenv('MYSQL_DB_PASS') ? getenv('MYSQL_DB_PASS') : '',
        ],

        'grants' => [
            Grant\ClientCredentialsGrant::class => Grant\ClientCredentialsGrant::class,
            Grant\PasswordGrant::class => Grant\PasswordGrant::class,
            Grant\AuthCodeGrant::class => Grant\AuthCodeGrant::class,
            Grant\ImplicitGrant::class => Grant\ImplicitGrant::class,
            Grant\RefreshTokenGrant::class => Grant\RefreshTokenGrant::class,
        ],
    ],
];

конфиг / автозагрузки / pipeline.php

Без изменений.

конфиг / routes.php

<?php

declare(strict_types=1);

use MyProject\Api\Handler\HomePageHandler;
use MyProject\Api\Handler\PingHandler;
use Psr\Container\ContainerInterface;
use Zend\Expressive\Application;
use Zend\Expressive\Authentication\AuthenticationMiddleware;
use Zend\Expressive\Authentication\OAuth2\TokenEndpointHandler;
use Zend\Expressive\MiddlewareFactory;

return function (Application $app, MiddlewareFactory $factory, ContainerInterface $container) : void {
    $app->post('/oauth2/token', TokenEndpointHandler::class);

    $app->get('/', HomePageHandler::class, 'home');
    $app->get('/api/ping', [
        AuthenticationMiddleware::class,
        PingHandler::class,
    ], 'api.ping');
};

+++ ОБНОВЛЕНО +++

Я обнаружил, что приложение аварийно завершает работу с InvalidConfigException и появляется сообщение «Служба AuthenticationInterface отсутствует». Исключение выдается классом AuthenticationMiddlewareFactory.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...