• 售前

  • 售后

热门帖子
入门百科

PHP中token的生成案例

[复制链接]
向往草原403 显示全部楼层 发表于 2021-8-14 14:20:29 |阅读模式 打印 上一主题 下一主题
php token的天生

接口特点汇总:
1、因为黑白开放性的,以是全部的接口都是封闭的,只对公司内部的产品有用;
2、因为黑白开放性的,以是OAuth那套协议是行不通的,因为没有中央用户的授权过程;
3、有点接口须要用户登录才能访问;
4、有点接口不须要用户登录就可访问;
针对以上特点,移动端与服务端的通讯就须要2把钥匙,即2个token。
第一个token是针对接口的(api_token);
第二个token是针对用户的(user_token);
先说第一个token(api_token)

它的职责是保持接口访问的隐蔽性和有用性,包管接口只能给自家人用,怎么做到?参考思绪如下:
如今的接口根本是mvc模式,URL根本是restful风格,URL大要格式如下:
http://blog.snsgou.com/模块名/控制器名/方法名?参数名1=参数值1&参数名2=参数值2&参数名3=参数值3
接口token天生规则参考如下:
api_token = md5 ('模块名' + '控制器名' + '方法名' + '2013-12-18' + '加密密钥') = 770fed4ca2aabd20ae9a5dd774711de2
此中的
1、 '2013-12-18' 为当天时间,
2、'加密密钥' 为私有的加密密钥,手机端须要在服务端注册一个“接口利用者”账号后,体系会分配一个账号及暗码,数据表计划参考如下:
字段名字段范例注释
client_idvarchar(20)客户端ID
client_secretvarchar(20)客户端(加密)密钥
服务端接口校验,PHP实现流程如下:
  1. <?php
  2. // 1、获取 GET参数 值
  3. $module = $_GET['mod'];
  4. $controller = $_GET['ctl']
  5. $action = $_GET['act'];
  6. $client_id = $_GET['client_id'];
  7. $api_token = $_GET[''api_token];
  8. // 2、根据客户端传过来的 client_id ,查询数据库,获取对应的 client_secret
  9. $client_secret = getClientSecretById($client_id);
  10. // 3、服务端重新生成一份 api_token
  11. $api_token_server = md5($module . $controller . $action .  date('Y-m-d', time()) .  $client_secret);
  12. // 4、客户端传过来的 api_token 与服务端生成的 api_token 进行校对,如果不相等,则表示验证失败
  13. if ($api_token != $api_token_server) {
  14.     exit('access deny');  // 拒绝访问
  15. }
  16. // 5、验证通过,返回数据给客户端
  17. //。。。
  18. ?>
复制代码
再说第二个token(user_token)

它的职责是保护用户的用户名及暗码多次提交,以防暗码泄露。
如果接口须要用户登录,其访问流程如下:
1、用户提交“用户名”和“暗码”,实现登录(条件答应,这一步最好走https);
2、登录乐成后,服务端返回一个 user_token,天生规则参考如下:
服务端用数据表维护user_token的状态,表计划如下:
字段名字段范例注释
user_idint用户ID
user_tokenvarchar(36)用户token
expire_timeint逾期时间(Unix时间戳)
(注:只列出了核心字段,别的的再扩展吧!!!)
服务端天生 user_token 后,返回给客户端(自己存储),客户端每次接口请求时,如果接口须要用户登录才能访问,则须要把 user_id 与 user_token 传回给服务端,服务端担当到这2个参数后,须要做以下几步:
1、检测 api_token的有用性;
2、删除逾期的 user_token 表记载;
3、根据 user_id,user_token 获取表记载,如果表记载不存在,直接返回错误,如果记载存在,则进行下一步;
4、更新 user_token 的逾期时间(延期,包管其有用期内一连利用不掉线);
5、返回接口数据;
接口用比方下:

1、发布日志
URL:  http://blog.snsgou.com/blog/Index/addBlog?client_id=wt3734wy636dhd3636sr5858t6&api_token=880fed4ca2aabd20ae9a5dd774711de2&user_token=etye0fgkgk4ca2aabd20ae9a5dd77471fgf&user_id=12  请求方式:  POST
POST参数:title=我是标题&content=我是内容
返回数据:
  1. <span style="color: rgb(51, 51, 51); font-family: arial, helvetica, verdana, tahoma, sans-serif, 宋体; font-size: 14px; letter-spacing: 1px; background-color: rgb(238, 238, 238);">{</span><br data-filtered="filtered" style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: arial, helvetica, verdana, tahoma, sans-serif, 宋体; letter-spacing: 1px; background-color: rgb(238, 238, 238); font-size: 0px; height: 0px; line-height: 0;" />
  2. <span style="color: rgb(51, 51, 51); font-family: arial, helvetica, verdana, tahoma, sans-serif, 宋体; font-size: 14px; letter-spacing: 1px; background-color: rgb(238, 238, 238);">      'code' => 1, // 1:成功 0:失败</span><br data-filtered="filtered" style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: arial, helvetica, verdana, tahoma, sans-serif, 宋体; letter-spacing: 1px; background-color: rgb(238, 238, 238); font-size: 0px; height: 0px; line-height: 0;" />
  3. <span style="color: rgb(51, 51, 51); font-family: arial, helvetica, verdana, tahoma, sans-serif, 宋体; font-size: 14px; letter-spacing: 1px; background-color: rgb(238, 238, 238);">      'msg' => '操作成功' // 登录失败、无权访问</span><br data-filtered="filtered" style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: arial, helvetica, verdana, tahoma, sans-serif, 宋体; letter-spacing: 1px; background-color: rgb(238, 238, 238); font-size: 0px; height: 0px; line-height: 0;" />
  4. <span style="color: rgb(51, 51, 51); font-family: arial, helvetica, verdana, tahoma, sans-serif, 宋体; font-size: 14px; letter-spacing: 1px; background-color: rgb(238, 238, 238);">      'data' => []</span><br data-filtered="filtered" style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: arial, helvetica, verdana, tahoma, sans-serif, 宋体; letter-spacing: 1px; background-color: rgb(238, 238, 238); font-size: 0px; height: 0px; line-height: 0;" />
  5. <span style="color: rgb(51, 51, 51); font-family: arial, helvetica, verdana, tahoma, sans-serif, 宋体; font-size: 14px; letter-spacing: 1px; background-color: rgb(238, 238, 238);">}</span>
复制代码
到此这篇关于PHP中token的天生案例的文章就先容到这了,更多相关PHP天生token内容请搜刮草根技术分享以前的文章或继续欣赏下面的相关文章盼望大家以后多多支持草根技术分享!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作