您好我正在研究Android应用程序,其中我需要执行几个https Web服务,所以我的所有webservice URL和Web API KEY都在代码加服务器的IP地址.当任何人对我的应用程序进行逆向工程时,那个人可以获得我的Web服务URL以及API KEY然后可以使用rest客户端轻松命中它.
如何确保任何攻击者都无法得到我在strings.xml中定义的WEB API KEY
提前致谢.
最佳答案
我遇到了同样的问题.
首先要确保这是我创建的应用程序仅调用Web服务.即使他们通过崇敬工程获得关键.
其次,有效用户正在调用该应用程序.
以下检查在服务器中完成.
首先要确保这是我创建的应用程序仅调用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();
}
}