2

REST API の認証を堅牢にするのに問題があります。

APIキー、タイムスタンプなど、およびリクエスト本文またはURLクエリ文字列を使用して署名付きハッシュを生成しています。本文で送信されるものはすべて常に JSON である必要があるため、問題ありません。しかし、クエリ文字列に署名すると頭が痛くなります。

すべての REST クエリは、プライベート資格情報を署名トークンとして使用して、小文字のアルファベット順に並べ替えられたクエリ パラメーターに署名することによって認証される必要があります。署名は、クエリ文字列を URL エンコードする前に行う必要があります。

しかし、key[0]=somevalue&key[1]=someothervalue ではどうでしょう。それを注文する方法は?別の方法として、クエリ文字列に常に JSON を強制することもできますが、それは実行可能な解決策ですか?

someurl?{"somekey":"somevalue"}

編集

ここまでたどり着いた問題は次のとおりです。私 (クライアント) は ?a=value1&b=value2 を指定してリクエストを送信し、このクエリ文字列を使用してハッシュを作成します。しかし、サーバー (Apache、PHP) が ?b=value2&a=value1 を受け取ることがあったため、要求が失敗しました。別の結果を与えるハッシングにより、認証が失敗します。

4

1 に答える 1

0

$key私が正しく従うかどうかわからないので、 ?というパラメータを含む配列があります。そして、これはアルファベット順に並べる必要がありますか?

私は次のことをします

sort($key);
$queryStr = '';
for($k = 0; $k < count($key); $k++)
{
      $queryStr .= 'key['.$k.']='.strtolower($key[$k]);
      if($k < count($key)-1)
             $queryStr .= '&';
}

$restURL = 'someurl?'.$queryStr;
于 2012-10-26T13:30:50.030 に答える