Как я могу настроить Apigility для отправки заголовков ответа HMAC-авторизации?

Я реализую авторизацию в Apigility с использованием Hmac. В основном я использую класс этого парня как для клиента, так и для сервера ( https://github.com/reinaldoborges/rb-sphinx-hmac-zf2-client).

Теперь у меня есть этот кусок кода перед отправкой GET для моего Api.

$hmac = new HMAC(
            new HMACv0(), 
            new PHPHash('sha256'), 
            new StaticKey('[PRE-SHARED KEY]'), 
            new DummyNonce()       
    );

    $hmac->setKeyId('certkey');
    $hmac->setNonceValue('certNonce');


    $uri = "http://apicert.local/certificados";
    $cliente = new HMACHttpClient($uri);
    $cliente->setMethod('GET');
    $cliente->setHmac($hmac);

    try {
        $cliente->send();

        /**
         * Resposta
         */
        echo "Request HMAC Header:", PHP_EOL; **I'm asking for a Reply using HMAC-Authorization type of header **
        echo '     ', HMACHttpClient::HEADER_NAME, ' = ', $cliente->getHeader(HMACHttpClient::HEADER_NAME), PHP_EOL, PHP_EOL;
    } catch (Exception $e) {
        /**
         * ERRO
         */
        echo "##### ERRO #####", PHP_EOL;
        echo $e->getCode(), ' : ', $e->getMessage(), PHP_EOL;
        echo "##### ERRO #####", PHP_EOL, PHP_EOL;
    }
    $response = $cliente->getResponse();
    echo "Response Status Code: ", $response->getStatusCode(), PHP_EOL, PHP_EOL;
    echo "Response Headers: ";
    print_r($response->getHeaders()->toArray());
    echo PHP_EOL;
    echo "Response Cookies:", PHP_EOL;
    $cookies = $response->getCookie();
    foreach ($cookies as $cookie) {
        echo '     ', $cookie->toString(), PHP_EOL;
    }
    echo PHP_EOL;
    echo "Response Body:", PHP_EOL;
    echo $response->getBody();
    echo PHP_EOL, PHP_EOL;

И я получаю код состояния 406, который указывает, что этот вид заголовка не приемлем. Я пытался добавить в белый список содержимого, но этот параметр отсутствует. Как я могу получить авторизацию с сервера?

Запросить заголовок HMAC: HMAC-аутентификация = 1:certkey:certNonce:f9c9edcda43df5c466e54449f31900a6f9387afa32168327a0873a69b023abef Код состояния ответа: 406 Заголовки ответа: Массив ( [Дата] => 2.4> 2016: 23:55: 11 августа 2016 года, 11 августа 2016 г.7 (Ubuntu) [Access-Control-Max-Age] => 1000 [Access-Control-Allow-Headers] => X-Requested-With, Тип контента, Источник, Авторизация, Принять, Client-Security-Token, Принять -Кодирование [Access-Control-Allow-Methods] => POST, GET, OPTIONS, DELETE, PUT [Access-Control-Allow-Origin] => * [Content-Length] => 149 [Connection] => закрыть [Content-Type] => application/problem+json) Файлы cookie ответов: Тело ответа: {"type": " http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html", "title": "Not Приемлемо ","status":406,"detail":" Невозможно принять указанный тип подтверждения "}

1 ответ

Вам нужно будет создать новый тип авторизации. В пользовательском интерфейсе APigility в верхней части есть кнопка "Авторизация". Здесь вы можете добавить любой адаптер авторизации, который вы хотите. Даже адаптер hmac, если хотите.

Лично я использовал это для создания адаптера JWT.

Теперь этот адаптер должен расширяться ZF\MvcAuth\Authentication\AdapterInterface, Я также добавил этот адаптер в диспетчер сервисов.

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