Как заставить базовую HTTP-аутентификацию работать для приложения Apigility?

Я установил Basic Auth, как описано в документе Apigility (документ больше не обновляется, но основные шаги остаются прежними). Итак, я создал users.htpasswd файл и добавил адаптер аутентификации. мой /config/autoload/local.php был обновлен и получил конфиги адаптера:

return array(
    ...
    'zf-mvc-auth' => array(
        'authentication' => array(
            'adapters' => array(
                'dummy basic auth' => array(
                    'adapter' => 'ZF\\MvcAuth\\Authentication\\HttpAdapter',
                    'options' => array(
                        'accept_schemes' => array(
                            0 => 'basic',
                        ),
                        'realm' => 'Dummy Realm',
                        'htpasswd' => 'data/users.htpasswd',
                    ),
                ),
            ),
        ),
    ),
);

Все идет нормально:

Test: I sent a `GET` request got the data just like before the auth setup.
Expected: `200 OK`
Result: `200 OK`
OK

Затем я пошел в Apigility Admin Backend -> My API -> My Rest Service -> Authorization и отметил методы и конечные точки, для которых я хочу требовать авторизацию.

Test: I sent a new request without credentials / authentication token.
Expected: `403 Forbidden`
Result: `403 Forbidden`
OK

Test: I sent another request with wrong credentials / authentication token.
Expected: `401 Unauthorized`
Result: `403 Forbidden`
FAIL

Test: I sent a request with correct credentials / authentication token.
Expected: `200 OK`
Result: `403 Forbidden`
FAIL

Что я делаю неправильно? Как заставить работать обычную HTTP-аутентификацию?

1 ответ

Решение

Начиная с новой версии Apigility (точно не знаю, какая именно, но больше 1.0) появилась возможность создавать несколько адаптеров Auth и связывать каждый API с другим адаптером Auth.

Если вы создали адаптер авторизации (Аутентификация сверху -> Адаптеры -> Новый адаптер), у вас будет имя адаптера для HTTP Basic, который вы настроили. Имейте это в виду.

Затем перейдите в свой API (тот, который соответствует имени модуля, который содержит ваши ресурсы, а не отдельные ресурсы). На этом экране вы увидите "Аутентификация" в левом верхнем углу с выпадающим.

Auth Adapter Picker

В раскрывающемся списке выберите созданный вами адаптер аутентификации и сохраните свой выбор. Ваши ресурсы в этом API теперь должны правильно реагировать в зависимости от того, аутентифицированы вы или нет.

Другие вопросы по тегам