如何在Android中保护呼叫webservice

前端之家收集整理的这篇文章主要介绍了如何在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();
  }
}

猜你在找的Android相关文章