사용자가 요청과 함께 서명 된 인증 토큰을 보내야하는 RESTful 웹 서비스를 구현하여 요청이 중개자에 의해 변조되지 않았는지 확인할 수 있습니다. 내 현재 구현은 다음과 같습니다.
확인 토큰은 문자열로 직렬화 된 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로 매핑 할 속성의 순서를 지정할 수 있습니까 (예 : 오름차순)? 또는이 확인 단계를 가장 잘 구현할 수있는 다른 방법이 있습니까? 클라이언트와 서버 구현 모두 제가 개발했습니다. 서명 및 확인을 위해 Java Security API를 사용합니다.