そこで、ASP.NET で WebAPI を使用して REST アプリを作成しています。問題が発生しました。
PHP では、urlencode 関数を使用しています。
元のbase64でエンコードされた文字列は
kA+1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3/WubyGTc=
PHPでurlencodeを実行した後、次のようになります:-
kA%2B1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3%2FWubyGTc%3D
このデバッグに続いて、私はフィドラーをチェックし、実際に正しいURLエンコードされた文字列を送信しています...
ASP.NET MVC WebAPI に到達すると、次のようになります:-
kA+1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3/WubyGTc%3
したがって、WebAPI または MVC は、それ自体でいくつかの先行 URL デコードを実行しようとしているように見えますが、それには 2 つの問題があります:-
- 文字列を部分的にデコードしているだけなので、+ と / 記号は正しく変換されますが、= は変換されません。
- %3D から D を切り捨てているようです。その結果、有効な URL 文字ではない %3 が生成されます。
以前にこの問題を経験した人はいますか? それを複製するには、単純に Web アプリを作成します。
public TokenAPI Get(Guid caller, Guid id, string ip, string signature, Guid eventID)
{
}
そして、値を渡します
/api/GenerateToken?id=d9a2057c-c228-40d4-a9a9-5d7a4da4984b&caller=e1af32bb-ac84-4f45-b4d6-67f7543ffab2&ip=127.0.0.1&eventID=f6d71c3d-ef00-41e1-8dec-a3a77bdf7484&signature=kA%2B1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3%2FWubyGTc%3D
次に、署名パラメーターを調べると、部分的にしか URLDecoded されていないことがわかります...
任意のポインタをいただければ幸いです