Я настроил 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-аутентификацию?
Начиная с новой версии Apigility (точно не знаю, какая именно, но больше 1.0) появилась возможность создавать несколько адаптеров Auth и связывать каждый API с различным адаптером Auth.
Если вы создали адаптер авторизации (Аутентификация сверху -> Адаптеры -> Новый адаптер), у вас будет имя адаптера для HTTP Basic, который вы настроили. Имейте это в виду.
Затем перейдите в свой API (тот, который соответствует имени модуля, который содержит ваши ресурсы, а не отдельные ресурсы). На этом экране вы увидите «Аутентификация» в левом верхнем углу с выпадающим меню.
В раскрывающемся списке выберите созданный вами адаптер аутентификации и сохраните свой выбор. Ваши ресурсы в этом API теперь должны правильно реагировать в зависимости от того, аутентифицированы вы или нет.
Других решений пока нет …