文档章节

TOKEN设计

DrChenXX
 DrChenXX
发布于 11/17 08:47
字数 738
阅读 9
收藏 0

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. 返回接口数据;

© 著作权归作者所有

共有 人打赏支持
上一篇: 限制文本框输入
下一篇: php获取客户端IP
DrChenXX
粉丝 8
博文 47
码字总数 15682
作品 0
金华
程序员
私信 提问
专访Token经济设计专家叶开:Token设计画布与10大设计模式

作者:叶开 Token经济系统设计方面的先行者。 矩阵数字经济智库合伙人,林达控股(1041HK)执行董事,中农普惠金服董事合伙人,南京大学兼职教授。专注于传统产业升级、产业金融和区块链,著...

HiBlock
11/06
0
0
webAPI token设计的问题

webAPI token一般怎么设计,加密后的token ,下次传过来的时候怎么知道这个token 对应哪个授权用户的?是在后台用key -value这种存储起来,下次token过来,使用get(token) 这种方式取到它对应...

黑帽子
2016/03/04
1K
3
下一代的通证经济什么样:项目方不能左右通证分配的比例

互链脉搏按:区块链自诞生,就伴随着一个词——token,中文有人将其翻译成通证、代币、通票等。和区块链工程这类硬技术不同,token是区块链软的一面,token机制和区块链技术常常硬软合璧,阴...

互链脉搏
08/09
0
0
API 接口设计中Token设计讨论

在实际的网站设计中我们经常会遇到用户数据的验证和加密的问题,如果实现单点,如果保证数据准确,如何放着重放,如何防止CSRF等等。 其中,在所有的服务设计中,都不可避免的涉及到Token的设...

董小保
08/15
0
0
API 接口设计中 Token 类型的分类与设计

在实际的网站设计中我们经常会遇到用户数据的验证和加密的问题,如果实现单点,如果保证数据准确,如何放着重放,如何防止CSRF等等 其中,在所有的服务设计中,都不可避免的涉及到Token的设计...

董小保
08/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ubuntu美化记,-修改皮肤,安装工具。

事情由来 最近系统盘坏了,换了新SSD,也换了新版的ubuntu 18.04LTS;不得不说,ubuntu 的桌面搞的越来越漂亮了。 把调整过的zsh shell样式,截个图上来镇一下楼: 添加了对python virtuale...

janl
15分钟前
0
0
阿里云物联网边缘计算加载MQTT驱动

写在前面 本文在LinkEdge快速入门样例驱动的基础上,加载了MQTT订阅的客户端,使得边缘端容器可以通过MQTT获得外部数据。 1. 系统需求 物联网边缘计算平台,又名Link IoT Edge[1]。在物联网边...

阿里云云栖社区
16分钟前
0
0
错误: 找不到或无法加载主类

在IDEA的使用过程中,经常断掉服务或者重启服务,最近断掉服务重启时突然遇到了一个启动报错: 错误:找不到或无法加载主类 猜测:1,未能成功编译; 尝试:菜单---》Build---》Rebuild Pro...

安小乐
32分钟前
2
0
vue路由传参,刷新页面,引发的bug

最近遇到一个bug 通过vue路由跳转到页面, 然后接参控制(v-if ),成功显示 而刷新页面,显示失败。 苦苦地找了半天原因,打印参数发现正确,再打印下类型......,路由跳过来会保持传参时的...

hanbb
32分钟前
3
0
【58沈剑 架构师之路】InnoDB,select为啥会阻塞insert?

MySQL的InnoDB的细粒度行锁,是它最吸引人的特性之一。 但是,如《InnoDB,5项最佳实践》所述,如果查询没有命中索引,也将退化为表锁。 InnoDB的细粒度锁,是实现在索引记录上的。 一,Inn...

张锦飞
36分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部