TOKEN设计

TOKEN设计

  1. Api_Token

    1. 首先需要知道API是什么?

      API(Application Programming Interface)即应用程序接口。你可以认为 API 是一个软件组件或是一个 Web 服务与外界进行的交互的接口。而我们在这里要谈论的,是作为一家公司如何跟外界进行交互。从另一个角度来说,API 是一套协议,规定了我们与外界的沟通方式:如何发送请求和接收响应。

    2. API的特点:

      • 因为是非开放性的,所以所有的接口都是封闭的,只对公司内部的产品有效;
      • 因为是非开放性的,所以OAuth那套协议是行不通的,因为没有中间用户的授权过程;
      • 接口分为需要用户登录才能访问的和不需要用户登录就可访问的;
    3. 职责

      保持接口访问的隐蔽性和有效性,保证接口只有可信任的来源才可以访问。

    4. 模式:

      现在的接口基本是mvc模式,URL基本是restful风格,URL大体格式如下:

      http://www.api.com/模块名/控制器名/方法名?参数名1=参数值1&参数名2=参数值2
      

      生成规则参考如下:

      $api_token = md5 ('模块名' + '控制器名' + '方法名' + '时间' + '加密密钥');
      
    5. 例子

      <?php
      //获取GET参数值
      $module = $_GET['module'];
      $controller = $_GET['controller']
      $action = $_GET['action'];
      $client_id = $_GET['client_id'];
      $api_token = $_GET['api_token'];
      
      //根据客户端传过来的client_id,查询数据库,获取对应的client_secret
      $client_secret = getClientSecret($client_id);
      
      //服务端重新生成一个api_token
      $api_token_server = md5($module . $controller . $action . date('Y-m-d', time()) . $client_secret);
      //客户端传过来的api_token与服务端生成的api_token进行校对,如果不相等,则表示验证失败
      if ($api_token != $api_token_server) {
      exit('access deny'); //拒绝访问
      }
      //验证通过,返回数据给客户端
      ?>
      
  2. User_Token

    1. 职责

      保护用户的用户名及密码多次提交,以防密码泄露。

    2. 模式

      登录成功后,服务端返回一个user_token,生成规则参考如下:

      $user_token = md5('用户的uid' + 'Unix时间戳' + '证书私钥')
      

      服务端生成user_token后,返回给客户端(自己存储),客户端每次接口请求时,如果接口需要用户登录才能访问,则需要把 user_id与user_token传回给服务端,服务端接受到这2个参数后,需要做以下几步:

      1. 检测user_token的有效性;
      2. 删除过期的user_token表记录;
      3. 根据user_id,user_token 获取表记录,如果表记录不存在,直接返回错误,如果记录存在,则进行下一步;
      4. 更新user_token 的过期时间(延期,保证其有效期内连续操作不掉线);
      5. 返回接口数据;

猜你喜欢

转载自my.oschina.net/u/3756690/blog/2877511