私はHmacを使ってApigilityで認証を実装しています。基本的には、私はクライアントとサーバーの両方のためにこのフェッラのクラッセを使用しています(https://github.com/reinaldoborges/rb-sphinx-hmac-zf2-client)。HMAC認可応答ヘッダーを送信するようにApigilityを設定するにはどうすればよいですか?
私はApiにGETを送る前にこのコードを書いています。
$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のレスポンスヘッダ:配列([日] =>木、2016年8月11日午後11時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 => * [Content-Length] => 149 [Connection] =>トークン、アクセプトエンコーディング[アクセス制御許可メソッド] => POST、GET、OPTIONS、DELETE、PUT [アクセス制御許可] >「閉じる」[閉じる] [コンテンツタイプ] => application/problem + json)レスポンスクッキー:レスポンスボディ:{"type": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html"、 "title": "Not Acceptable"、 "status":406、 "detail"受諾タイプを指定できない」}