リクエストが仲介者によって改ざんされていないことを確認できるように、ユーザーがリクエストと一緒に署名された検証トークンを送信する必要があるRESTfulWebサービスを実装しています。私の現在の実装は次のとおりです。
検証トークンは、文字列にシリアル化され、ハッシュおよび暗号化されたVerifDataオブジェクトです。
class VerifData {
int prop1;
int prop2;
}
私のサービスでは、シリアル化するデータをVerifDataのインスタンスに配置し、Jackson ObjectMapperを使用してシリアル化し、検証トークンとともに検証エンジンに渡します。
VerfiData verifData = new VerifData(12345, 67890);
ObjectMapper mapper = new ObjectMapper();
String verifCodeGenerated = mapper.writeValueAsString(verifData);
ただし、アプリケーションコンテナが起動するたびに、ObjectMapperによって文字列にマップされるプロパティの順序が変わるようです。
例:一度は
{"prop1":12345,"prop2":67890}
そしてまた別の時は
{"prop2":67890,"prop1":12345}
したがって、クライアントがVerifDataインスタンスを最初の文字列としてシリアル化した場合、それが正しい場合でも、失敗する可能性は50%です。
これを回避する方法はありますか?ObjectMapperでマップするプロパティの順序を指定できますか(昇順など)?または、この検証手順を最適に実装する他の方法はありますか。クライアントとサーバーの両方の実装は私が開発しました。署名と検証にはJavaSecurityAPIを使用しています。