使用HTTP POST从token发送令牌到cakephp

时间:2013-06-28 08:08:03

标签: android cakephp authentication cakephp-2.0 cakephp-2.1

我通过json对象中的HTTP Post将数据从Android设备发送到我的cakephp网站..就像这样

    HttpPost post = new HttpPost("https://www.mywebtest.com/test");

然后我解码json并像这样提取数据

            if ($this->request->isPost()){

        $json = $this->request->data('json');
        $data = json_decode($json, TRUE);

但目前我没有检查http帖子或数据是来自我的Android应用程序还是其他人。如果有人知道网址,他可以做恶意的事情。因为有时现在我有的网址写在 httpPost 当我在浏览器中输入这个网址时,浏览器上没有显示任何内容..我想显示某种错误或404页面,如果有人在浏览器中输入了网址..基本上,你可以说我正在创建CakePHP是一个API,我想做的是保护API,所以只有我的应用程序可以执行请求。所以我想实现某种类型的身份验证..做一些研究我想出一个解决方案从android应用程序传递另一个参数作为秘密令牌,然后从我的webapp检查令牌,然后提取数据..我不知道如何在httppost中传递另一个参数,然后在我的网页上检查它...如果可能的话我也想要随机生成令牌并在每个请求上对其进行加密,然后通过解密来解密当数据从android发布到webapp时,在webapp中输入密钥..如果有人在此之前做过或有想法,请分享代码或任何链接。

2 个答案:

答案 0 :(得分:0)

为参数创建一个JsonObject,

JSONObject parametersList = new JSONObject();

将您的参数放入JSONObject

parametersList.put("testID", 123);

int androidValue = 231231231; // a identifer or password your choice.
parametersList.put("androidValue", androidValue);

并将列表添加到您的HttpPost

HttpPost request = new HttpPost("https://www.mywebtest.com/test");

request.setHeader(HTTP.CONTENT_TYPE, "application/json; charset=utf-8");

request.setEntity(new StringEntity(parameters.toString(), HTTP.UTF_8));

在php方面;

<?php
$postdata = $HTTP_RAW_POST_DATA;
$data = json_decode($postdata);
$id = $data->testID;
$androidValue = $data->androidValue;

if(androidValue == 231231231)
{
   $json = "{d:[{sample1:'".$id."',sample2:'value12'}]}";
   $response = $_GET["callback"] . $json;
   echo $response;
}
else
{
    // send failed data
}

?>

这是如何在android端得到回应

            HttpResponse response = client.execute(request);

            final int statusCode = response.getStatusLine().getStatusCode();
            final String jsonResponse = EntityUtils.toString(response.getEntity());

            if (statusCode != HttpStatus.SC_OK) {
                Log.w(TAG, "Error in web request: " + statusCode);
                Log.w(TAG, jsonResponse);
                return null;
            } else {
                Log.i(TAG, jsonResponse);
                return jsonResponse;
            }

我希望这会有所帮助。

答案 1 :(得分:-1)

尝试使用RequestHandler isMobile()。

如果请求来自手机,您将会成真。

http://book.cakephp.org/2.0/en/core-libraries/components/request-handling.html#RequestHandlerComponent::isMobile