如何在Android中保护呼叫webservice

您好我正在研究Android应用程序,其中我需要执行几个https Web服务,所以我的所有webservice URL和Web API KEY都在代码加服务器的IP地址.当任何人对我的应用程序进行逆向工程时,那个人可以获得我的Web服务URL以及API KEY然后可以使用rest客户端轻松命中它.

如何确保任何攻击者都无法得到我在strings.xml中定义的WEB API KEY

提前致谢.

最佳答案
我遇到了同样的问题.
首先要确保这是我创建的应用程序仅调用Web服务.即使他们通过崇敬工程获得关键.
其次,有效用户正在调用该应用程序.
以下检查在服务器中完成.

1)确认它真的由Google签名.

2)确认它真的适合你.

您需要使用Google开发者控制台https://console.developers.google.com/project?authuser=0
在Menu API&下创建两个Client Ids(一个用于服务器,另一个用于android应用程序.) AUTH.
要为Android应用程序创建客户端ID,您可以使用keytool
keytool -exportcert -alias< your-key-name> -keystore< your-key-store-file> -v -list

我已经按照here的步骤进行了操作

Serverside PHP示例如下

function checkSession($token){
$result = Array();
if(isset($_SERVER['HTTPS']))
{
    if ($_SERVER["HTTPS"] == "on") 
    {
        $secure_connection = true;
    }
}
if($secure_connection){
try {
$client = new Google_Client();
$client->setClientId(CLIENT_ID);
$client->setClientSecret(CLIENT_SECRET);
$ticket = $client->verifyIdToken($token);
$validtocken = false;
  if($ticket){
   $token_data = $ticket->getAttributes();
   if($token_data ["payload"]["aud"]==CLIENT_ID &&
      $token_data ["payload"]["azp"]==ANDROID_ID){
       $validtocken = true;
       $result["Email"]=$token_data ["payload"]["email"];
      }
   else  
   { 
    log_message(serialize($token_data)); 
   }
  }
  } catch (Exception $e) {
  $result["Details"]=$e->getMessage();
  }
}

相关文章

以下为个人理解,如错请评 CE: 凭据加密 (CE) 存储空间, 实际路径/data/user_ce/ DE: 设备加密 (DE) 存...
转载来源:https://blog.csdn.net/yfbdxz/article/details/114702144 用EventLog.writeEvent打的日志(或...
事件分发机制详解 一、基础知识介绍 1、经常用的事件有:MotionEvent.ACTION_DOWN,MotionEvent.ACTION...
又是好久没有写博客了,一直都比较忙,最近终于有时间沉淀和整理一下最近学到和解决的一些问题。 最近进...
Android性能优化——之控件的优化 前面讲了图像的优化,接下来分享一下控件的性能优化,这里主要是面向...
android的开源库是用来在android上显示gif图片的。我在网上查了一下,大家说这个框架写的不错,加载大的...