JWS из Google SafetyNet содержит значение одноразового номера, отличное от того, которое я отправил в attest()

Я пытаюсь внедрить SafetyNet в приложение для Android, но столкнулся с этой проблемой:

JWS, которые я получаю, показывает одноразовый номер как конкретное значение, но оно отличается от того, которое я передал здесь:

 Task<SafetyNetApi.AttestationResponse> task = client.attest(nonce.getBytes(), apiKey);
    task.addOnSuccessListener(this, new OnSuccessListener<SafetyNetApi.AttestationResponse>() {
        @Override
        public void onSuccess(SafetyNetApi.AttestationResponse attestationResponse) {             
            handleJWS(attestationResponse.getJwsResult());

        }
    }).addOnFailureListener(this, new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            if (BuildConfig.DEBUG)
                Log.d("cts", "fail " + e.toString());
        }
    });

Я использую nonce.getBytes() в качестве параметра, так как одноразовый номер, сгенерированный сервером, представляет собой строку.

Я снова и снова перечитывал документацию, но не могу понять, почему значение nonce, которое я получаю как часть JWS, не соответствует значению, которое я указал в методе attest(). Если это ожидается, почему это так и как я могу заставить сервер ожидать это значение, чтобы проверить его?

Любые идеи?

Спасибо!


person Schreiby    schedule 12.07.2018    source источник
comment
Как вы сравниваете одноразовые номера?   -  person davisjp    schedule 18.07.2018


Ответы (1)


У меня была та же проблема, и я только что понял, что не так: одноразовый номер, apkDigestSha256 и значения apkCertificateDigestSha256 закодированы в Base64! См. https://github.com/googlesamples/android-play-safetynet/blob/master/server/java/src/main/java/AttestationStatement.java

Чтобы сравнить свой одноразовый номер с одноразовым номером из JWS, вам нужно сделать:

Arrays.equals(yourNonce, Base64.decode(attestationStatement.nonce(), Base64.DEFAULT))
person Xavier Balloy    schedule 27.08.2018