2016-08-12 2 views
0

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

Теперь у меня есть этот кусок кода перед отправкой 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-Authentication = 1: certkey: certNonce: f9c9edcda43df5c466e54449f31900a6f9387afa32168327a0873a69b023abef код ответа: 406 Response Headers: Array ([Date] => Чт, 11 августа 2016 23:55:33 GMT [Сервер] => Apache/2.4.7 (Ubuntu) [Access-Control-Max-Age] => 1000 [Access-Control-Allow-Headers] => X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security -Token, Accept-Encoding [Access-Control-Allow-Methods] => POST, GET, OPTIONS, DELETE, PUT [Access-Control-Allow-Origin] => * [Content-Length] => 149 [Connection] = > закрыть [Content-Type] => application/problem + json) Response Cookies: Response Body: {"type": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html", "title": "Not Acceptable", "status": 406, "detail": " Нельзя присвоить тип принимаемого типа "}

ответ

0

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

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

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

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