我正在尝试SafetyNet
通过谷歌使用 API。我已成功向 google 服务器发送请求并获得 JWS 输出。为了将 JWS 解析为 JSON,我将 JWS 令牌发送到谷歌给出的 URL。但由于某种原因,它显示出一些错误。
文档:这里
我的排球代码:
public void decodeJWS(final String x){
String URL = "https://www.googleapis.com/androidcheck/v1/attestations/verify?key="+getResources().getString(R.string.APIKey);
StringRequest sq = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
result.setText(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
result.setText(error.toString());
}
}){
@Override
public String getBodyContentType() {
return "application/json";
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
// headers.put("signedAttestation",x);
headers.put("Content-Type", "application/json; charset=utf-8");
return headers;
}
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String,String> body = new HashMap<>();
body.put("signedAttestation",x);
return body;
}
};
requestQueue.add(sq);
}
错误消息说 com.android.volley.serverError
。
日志说BasicNetwork.performRequest: Unexpected response code 400 for https://www.googleapis.com/androidcheck/v1/attestations/verify?key=MyKey
我尝试使用Postman
发送相同的请求,但它给了我
{
"isValidSignature": false
}
作为回应。我相信我已经在我的凌空代码中正确设置了所有标题和内容。这有什么错误吗?
编辑 :
我更新了我的代码以使用JSONObjectRequest
. 当我使用它时,没有 400 错误代码,但它返回的内容与 Postman 查询返回的内容相同。
{
"isValidSignature": false
}
我从attestationResult
usinggetJWSResult()
调用中获取签名,然后立即将其作为参数发送给函数。为什么它显示它不是一个有效的签名。