【问题标题】:Send token with HTTP POST from android to cakephp使用 HTTP POST 将令牌从 android 发送到 cakephp
【发布时间】:2013-06-28 08:08:03
【问题描述】:

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

【问题讨论】:

  • @Amourreux 我不明白你写的代码在做什么,你能解释一下吗?我想做的是在我的网络服务器上验证数据实际上来自我的移动应用程序。
  • 我不知道 $_GET["callback"] 来自哪里以及它的作用是什么?而且您正在发送静态令牌我想要的是我想在每个请求上更改令牌并且还想发送加密令牌

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


【解决方案1】:

为参数创建一个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;
            }

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    尝试使用 RequestHandler isMobile()。

    如果请求来自手机,你会得到真实的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 2013-05-12
      • 1970-01-01
      相关资源
      最近更新 更多