2015-04-16 180 views
1

作为示例:REST API请求应该是客户端还是服务器端?

有检查结果验证API,并且有另一个web应用程序使用api作为服务。根据该API响应(如果成功),用户可以进入网站或不

要做到这一点我有一个基本的问题,
我带着两个选项(可能有很多:)任何一个好接受! )

01)。使用跨域AJAX请求和根据响应调用API。发送另一个请求的Web应用程序,服务器脚本,创建一个会话

$.get("http://api.resultval.com/v1/", 
    {index_no : no,subject : sub,grade : grade},function(response_msg){ 
     obj = JSON.parse(response_msg); 
     if(obj.msg.valid){ 
     // results validated marked as validated result on user cv 
     } 
    } 
); 

02)。而不是发送AJAX请求API发送用户插入结果给服务器端,并使用服务器端脚本调用使用的API狂饮

$client = new \GuzzleHttp\Client(); 
      $response = $client->get('http://api.resultval.com/v1/'.Input::get('index_no').'/'.Input::get('subject').'/'.Input::get('grade')); 
      if($response->json()['msg']==='verified'){ 
      // results validated marked as validated result on user cv 
      } 

什么是最好的方法?如何安全?我认为第二个是好的!但我还在想在客户端有一种方法可以做到这一点?

+0

你说的是类似登录的东西吗?所以被调用的API决定用户是否可以访问或者不依赖于传输的数据? – KhorneHoly

+0

@KhorneHoly Yeh这是我的问题! – Alupotha

+1

@ Tech-Sira 我更喜欢你的第二个解决方案。最好把你的API调用到服务器端,用户不需要知道你在调用api,并且通过AJAX,他们可以知道你的API URL和发送的数据(在浏览器中使用开发工具)。 –

回答

1

考虑实施使用JWT您的解决方案:

JSON网络令牌(JWT)是代表的权利要求双方之间传输的紧凑URL安全的手段。在JWT的索赔被编码为正在使用JSON网络签名(JWS)

4

我宁愿选择做的原因如下这个服务器端数字签名的JSON对象:

  1. 的JavaScript可以由用户操纵。 Ajax请求可能会有毒,因为JS代码中的错误尝试会导致安全漏洞。

  2. 在ServerSide上,您有更好的选项来记录特定用户发送的调用,并根据来自API的结果执行操作。也许有一天,你需要根据你得到的结果去做昂贵的操作。

  3. 用户知道的越少,它越好。您的用户不需要知道您正在打电话的服务。至少他们不知道API Url和直接发送给API的数据(开发人员或流量嗅探器可能会做什么)

  4. 您无法保证可能的第三方API的安全性,但你可以为自己的系统。如果用户有可能跟踪您使用发送的数据调用的API以及用户可能尝试攻击此API的确切URL。虽然您不知道API是否足以抵御此类攻击,但您可能知道您的系统确实如此。如果发生攻击或安全漏洞,您也可以立即更新您的项目。你不能说这会在第三方项目中发生。我认为这是最重要的想法之一!

相关问题