来自 Google SafetyNet 的 JWS 包含与我在 attest() 中提交的不同的 nonce 值
JWS from Google SafetyNet contains different nonce value than one I submitted in attest()
我正在尝试在 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()
作为参数,因为从服务器生成的随机数是一个字符串。
我一遍又一遍地阅读 documentation,但无法弄清楚为什么我作为 JWS 的一部分收到的随机数值与我在 [=13 中输入的值不匹配=] 方法。如果这是预期的,为什么会这样,我怎样才能让服务器期望这个值来验证它?
有什么想法吗?
谢谢!
我遇到了同样的问题,只是弄清楚出了什么问题:nonce、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))
我正在尝试在 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()
作为参数,因为从服务器生成的随机数是一个字符串。
我一遍又一遍地阅读 documentation,但无法弄清楚为什么我作为 JWS 的一部分收到的随机数值与我在 [=13 中输入的值不匹配=] 方法。如果这是预期的,为什么会这样,我怎样才能让服务器期望这个值来验证它?
有什么想法吗?
谢谢!
我遇到了同样的问题,只是弄清楚出了什么问题:nonce、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))