OAuth用のサービスプロバイダの実装を書いており、実装者がクエリパラメータを注文する方法にバグを発見しました。私は完全にOAuthの仕様でlexicographical ordering要件を逃しただけの名前と値のパラメータの基本的な文字列の並べ替えをしていたOAuth - Cでの辞書順バイト値の順序付け
消費者から次のURI要求を考える:
http://api.com/v1/People/Search?searchfor=fl&[email protected]&Include=addresses
たシグニチャベースを注文する必要があります
http://api.com/v1/People/Search?searchfor=fl&[email protected]&include=addresses
:消費者から次のURI要求を考えると
Include=addresses, [email protected], searchfor=fl
:パラメータとして
得られた署名ベースのようなパラメータを注文する必要があります。「含む」クエリ文字列パラメータの場合の違いに注意してください
[email protected], include=addresses, searchfor=fl
。私が理解していることから、辞書順バイト値の順序はascii値を使用してパラメータを順序付けし、ascをオーダーします。
I = 73でi = 105なので、大文字Iは小文字iより前に並べる必要があります。
は、私がこれまでに次き:IEnumerable<QueryParameter> queryParameters = parameters
.OrderBy(parm => parm.Key)
.ThenBy(parm => parm.Value)
.Select(
parm => new QueryParameter(parm.Key, UrlEncode(parm.Value)));
をしかし、それは文字の並び替えASCII文字をカバーしています(INCLUDE =テスト&は=テストが含まれますない正しく並べ替え)。
この問題に答える効率的なアルゴリズムを作成する方法についてのご意見はありますか?または、ICompareを介してソートの大文字小文字を区別する方法は?
アンドリュー: 応答のためのThx。私は自分のサービスプロバイダ実装をロールバックしました。理由は2つあります 1。 より理解を深めるには、より良い方法はありません。2.プロトコルを拡張する必要があるビジネスケースがあります.- https://demo.staging.fellowshiponeapi.com/v1/ Util/AuthDocs.help 私はDotNetOpenAuthを見てきました。これは非常に滑らかな実装のようです。あなたが行ったのと同じように多くの機能を利用するには、それを破棄したに違いありません。 – Nick