SafetyNetauthentication需要api密钥吗?

我已成功创build后端服务和Android客户端进行SafetyNetauthentication。 当我将jws令牌发送到我的服务器并尝试validation它的证书时,事实certificate没有签名的证书。

我应该添加API密钥到我的Android应用程序?

我的authentication结果:

eyJhbGciOiJSUzI.eyJub.JXOvgIx0PufdyJ72Vo-FvTb_6Dwj7gcSxlXWHt8siVrgK2eMQA3V_eYbXS7NYkNUEXLLMNIfm8qEIwJQGYLUKE9GyaHjjuFt_YOkQMOzC8hh9VpIekS8bc_eRfvVajXzrFSRAigOnfVBrMGrVVpxsqtjqz1Y9ochGHwrjO2b8oZyw06HjzsnuT9YpLXakBg1azOYx9KP-_XkDaKW6_Lkfn6Rmo8hpatadIF5qn54W_UkXvvsG7d4P8h_7uvO66rRhK1OXg3Qhazta3B_XFtiLcmusaqmglopEW1hI07FAvrqzemuY-_4EcvReLKfo84rl_BuJmLFVtQtDyAHtzngxw 

Solutions Collecting From Web of "SafetyNetauthentication需要api密钥吗?"

您需要在最新版本的Google Play服务中使用API​​密钥。

请参阅新的SafetyNetClient::attest(byte[], String)方法的文档。


作为附注,我强烈build议您将validation配额设置为您在此处为Android应用生成的密钥的最小值1:

https://console.developers.google.com/projectselector/apis/api/androidcheck.googleapis.com/quotas

这个(几乎没有1错误;))阻止攻击者使用可从客户端代码中检索到的密钥,如下所示:

 curl --data '{"signedAttestation": "eyJhbGciOiJSUzI.eyJub.JXOvgIx0PufdyJ72Vo-FvTb_6Dwj7gcSxlXWHt8siVrgK2eMQA3V_eYbXS7NYkNUEXLLMNIfm8qEIwJQGYLUKE9GyaHjjuFt_YOkQMOzC8hh9VpIekS8bc_eRfvVajXzrFSRAigOnfVBrMGrVVpxsqtjqz1Y9ochGHwrjO2b8oZyw06HjzsnuT9YpLXakBg1azOYx9KP-_XkDaKW6_Lkfn6Rmo8hpatadIF5qn54W_UkXvvsG7d4P8h_7uvO66rRhK1OXg3Qhazta3B_XFtiLcmusaqmglopEW1hI07FAvrqzemuY-_4EcvReLKfo84rl_BuJmLFVtQtDyAHtzngxw"}' -H "Content-Type: application/json" -H "X-Android-Package: com.example" -H "X-Android-Cert: 1111111111111111111111111111111111111111" -X POST "https://www.googleapis.com/androidcheck/v1/attestations/verify?key=AIzaSyCmid3BBzBO0idOTNNRH-7RjCrA3xhvAho" 

用Android应用程序限制replaceX-Android-PackageX-Android-Certkey以testing您的API密钥。

我想你错过了一些基于文档的细节 – 使用Google APIvalidation响应 :

注意 :您需要一个API密钥才能访问Android设备validationAPI,并且该API是速率受限的。 由于这些原因,您应该仅在初始开发阶段使用API​​进行testing。 您不应该在生产场景中使用此validationAPI。

尝试添加API密钥并检查行为是否改变。

希望这可以帮助。

您可以自己validation回复。 以下是一些可以帮助您解释JWT响应的代码:

https://github.com/scottyab/safetynethelper/blob/master/safetynetlib/src/main/java/com/scottyab/safetynet/SafetyNetHelper.java

你会想validation你的后端签名。 谷歌确实让你知道你需要检查,如果你不使用他们的简单服务:

validation兼容性检查响应

您应采取措施确保兼容性检查响应实际上来自SafetyNet服务,并包含与您的请求数据相匹配的数据。

警告:您应该使用安全连接将整个JWS响应发送到您自己的服务器进行validation。 我们不build议您直接在您的应用中执行validation,因为在这种情况下,不能保证validation逻辑本身没有被修改。

按照以下步骤validationJWS消息的来源:

  1. 从JWS消息中提取SSL证书链。
  2. validationSSL证书链并使用SSL主机名匹配validation是否将叶证书颁发给主机名attest.android.com。
  3. 使用证书validationJWS消息的签名。
  4. 检查JWS消息的数据,以确保它与原始请求中的数据相匹配。 尤其要确保nonce,时间戳,包名称和SHA-256散列匹配。

来自: https : //developer.android.com/training/safetynet/attestation.html