Android 来自Google SafetyNet的JWS包含的nonce值与我在EXTEST()中提交的值不同

Android 来自Google SafetyNet的JWS包含的nonce值与我在EXTEST()中提交的值不同,android,safetynet,Android,Safetynet,我试图在Android应用程序中实现SafetyNet,但遇到了以下问题: 我收到的JWS将nonce显示为一个特定值,但它与我在此处传递的值不同: Task<SafetyNetApi.AttestationResponse> task = client.attest(nonce.getBytes(), apiKey); task.addOnSuccessListener(this, new OnSuccessListener<SafetyNetApi.Attesta

我试图在Android应用程序中实现SafetyNet,但遇到了以下问题:

我收到的JWS将nonce显示为一个特定值,但它与我在此处传递的值不同:

 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的一部分收到的nonce值与我在authentice方法中输入的值不匹配。如果这是预期的,为什么会这样?我如何让服务器预期此值以验证它

有什么想法吗


谢谢

我也遇到了同样的问题,只是找出了问题所在:nonce、apkDigestSha256和apkCertificateDigestSha256的值都是Base64编码的!看

为了将您的nonce与JWS中的nonce进行比较,您必须执行以下操作:

Arrays.equals(yourNonce, Base64.decode(attestationStatement.nonce(), Base64.DEFAULT))

你是如何比较nonce的?