2016-08-12 50 views
0

我正在使用Hmac在Apigility中實施授權。基本上我使用這個傢伙的客戶端和服務器類(https://github.com/reinaldoborges/rb-sphinx-hmac-zf2-client)。如何配置Apigility發送HMAC-授權響應頭?

現在我發送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狀態碼,指出這種標題是不可接受的。我試圖添加內容negotion白名單,但沒有這個選項。那麼我怎樣才能從服務器接收授權?

請求HMAC部首:HMAC-認證= 1:certkey:certNonce:f9c9edcda43df5c466e54449f31900a6f9387afa32168327a0873a69b023abef響應狀態代碼:406響應頭:陣列([日期] =>星期四,2016年8月11日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)響應Cookie:響應正文:{「type」:「http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html」,「title」:「Not Acceptable」,「status」:406,「detail」不能接受指定的接受類型「}

回答

0

您將不得不創建一個新的授權類型。 在Appigility UI中,頂部的命名授權中有一個按鈕。 在這裏你可以添加任何你想要的授權適配器。即使你想要的hmac適配器。

我個人用這個來創建一個jwt適配器。

現在,這個適配器應該延伸ZF\MvcAuth\Authentication\AdapterInterface。 我也將這個適配器添加到我的服務經理。