实施安全的API服务器

时间:2017-03-31 11:11:25

标签: javascript php json rest authentication

我正在寻找保护我在php中构建的伪api服务器。

这是api.php的一个非常基本的形式:

<?php
if (isset($_GET['type']) ) {
switch ($_GET['type']) {
case  'combobox'  :
header('Content-Type: application/json');
$an_array = array();
$an_array[0]['id'] = 'Option 1';
$an_array[0]['text'] = 'Option 1';
$an_array[1]['id'] = 'Option 2';
$an_array[1]['text'] = 'Option 2';
echo json_encode($an_array);
break;
default:
echo 'nothing to see here as type was not a valid option';
break;
}
}
else {
  echo 'no type specified';
}
 ?>

上面调用http://example.com/api.php?type=combobox时会返回以下json:

[{"id":"Option 1","text":"Option 1"},{"id":"Option 2","text":"Option 2"}]

这个json可以使用ajax在组合框中使用,如下所示:

call.php的内容:

<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
<link href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.1/css/select2.min.css" rel="stylesheet" />
</head>
  <select class="select2 select2-single" single data-placeholder="Select Types">
  <optgroup label="Types">
  </optgroup>
  </select>


<script>
$(document).ready(function() {
$(".select2").select2({
   width: '300px',
   ajax: {
     url: "http://example.com/json.php?type=combobox",
     dataType: 'json',
     delay: 250,
     multiple: "false",
     dropdownAutoWidth: 'true',
     processResults: function (data) {
       return {
         results: $.map(data, function (obj) {
           return {
             id: obj.id,
             text: obj.text
           };
         })
       };
     }
   }
 });
})
 </script>

在实践中,我有一个服务器,它提供一个Web应用程序,它有这个组合框和数百个其他的东西,并调用api服务器来查询mysql等。因为那些ajax调用是从用户的浏览器发生的并且正在填充组合框和数据表,我不能只是将Web应用程序服务器的IP锁定到api服务器。我可以获得用户会话并使用它做一些事情。 问题是,我想给第三方访问权限安全地查询此api返回。

我想也许我可以在登录后抓住php会话并将其传递给api服务器,然后仅在此会话处于活动状态时才将内容提供给浏览器。但这并没有解决我向第三方提供一些数据馈送的问题(不会与Web应用程序建立会话)。

我并不想在这里重新发明轮子,我愿意使用任何框架或方法来正确安全地完成任务。

我想解决方案将涉及查询api服务器:json.php?type = combobox&amp; apikey = xxxxxxxxrandomxxxxxxxxx apikey是某人不能从源代码中获取并在另一台机器上运行的东西?

0 个答案:

没有答案