2015-04-29 4 views
2

У меня очень простая служба REST с использованием Apigility, предоставляющая методы GET и POST. Я тестирую его с помощью Postman. Все работает нормально.Basic auth in Apigility при использовании Postman

Затем я пытаюсь добавить слой аутентификации. Для этого я создаю файл htpasswd, я создаю базовый адаптер Auth, указывающий на этот файл через интерфейс Apigility, и я выбираю этот тип проверки на странице настроек моего API.

Наконец, я хочу добавить запрос авторизации для запроса POST, а не GET.

Когда я пытаюсь опубликовать сообщение, меня попросят ввести логин и пароль, я набираю тот, который соответствует содержимому файла htpasswd, генерируется заголовок авторизации и работает POST.

Но когда я пытаюсь сделать запрос GET без заголовка авторизации, меня все еще запрашивают логин и пароль. Если я отменил, я получаю код статуса 401 (неавторизованный).

Насколько я понимаю, если нет заголовка авторизации, режим «гостя» используется Apigility, а поскольку метод GET не требует аутентификации, мне не нужно вводить логин и пароль для доступа к моему ресурсу.

Где я ошибся? Что я не понял правильно?

Благодаря

+0

Это не поможет, но я просто хотел сообщить вам, что у меня такая же проблема. Вам удалось решить эту проблему? Если я это выясню, я дам вам знать. – Ruben

+0

Привет, Боюсь, мне еще не удалось это решить, и я не работаю над этим на регулярной основе, так что с моей стороны не так много прогресса. Удачи! – gael

ответ

0

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

Проверьте конфигурацию для следующей конфигурации:

[ 
    'zf-mvc-auth' => [ 
     'authorization' => [ 
      'Your\Controller' => [ 
       'collection' => array(
        'default' => true, 
        'GET' => true, 
        'POST' => true, 
        // etc. 
       ), 
       'entity' => array(
        'default' => true, 
        'GET' => true, 
        'POST' => true, 
        // etc. 
       ), 
      ] 
     ] 
    ] 
] 

Вам необходимо установить методы, которые вы хотите разрешить без аутентификации false.

+0

Проверено, оно уже настроено. Я добавил значение по умолчанию, но все равно не работаю так, как должно быть. – gael

2

Вы только что упомянули, что делаете это в Postman, и я думаю, что в этом проблема.

HTTP-аутентификация имеет этап «pre-auth», при котором, если учетные данные отсутствуют, в ответе содержится заголовок WWW-Authenticate. Для машин клиентов (локон, HTTPie, клиентов основанного на языке и т.д.), это игнорируется, если код состояния не 401 или 403.

Однако в клиентов на основе браузера, такие как Постман , когда браузер сталкивается с таким заголовком, они обычно выдают вызов проверки подлинности и отправляют пустые учетные данные в случае отмены. Это, конечно, означает, что заголовок авторизации отправляется с недопустимыми учетными данными, что приводит к вашему 401.

Попробуйте использовать cURL или HTTPie из CLI; вы должны видеть там очень разные поведенческие условия.

 Смежные вопросы

  • Нет связанных вопросов^_^