API是什么?,一种针对用户的user_token模式

发布时间:2021-04-16 来源: 万汇智联 浏览次数:

首先,您需要知道什么是API?

API(应用程序编程接口)是应用程序编程接口。您可以将API视为软件组件或Web服务与外界交互的接口。我们在这里要谈论的是如何与外部环境(作为一家公司)进行交互。从另一个角度来看,API是一组协议,规定了我们与外界的通信方式:如何发送请求和接收响应。

API的功能:

1、由于未打开,所有接口都已关闭,仅对公司的内部产品有效;

2、由于未打开,因此OAuth协议将无法正常工作,因为没有针对中间用户的授权流程;

3、界面分为需要用户登录才能访问的界面和不需要用户登录的界面;

根据上述特征,移动终端与服务器之间的通信需要两个不同的令牌,一个是接口的api_token,另一个是用户的user_token;

一. api_token

它的责任是保持接口访问的隐蔽性和有效性api接口用户登录token,并确保只能从受信任的源访问该接口。参考思想如下:

根据服务器和客户端的公共属性生成随机字符串。客户端生成该字符串,服务器根据相同的算法生成字符串以验证客户端的字符串。

当前界面基本上是mvc模式,而URL基本上是Restful风格。 URL的一般格式如下:

模块名称/控制器名称/方法名称?参数名称1 =参数值1&参数名称2 =参数值2

接口令牌生成规则如下:

$ api_token = md5('模块名称'+'控制器名称'+'方法名称'+'2018-1-18'+'加密密钥')= 789fed3842aabd834e9a5dd7735532de2

1.'2018-1-18'是一天中的时间

2.“加密密钥”是专用加密密钥。在手机需要在服务器上注册“界面用户”帐户后,系统将分配一个帐户和密码。数据表设计参考如下:

字段名称和字段类型

 client_id  varchar(20) 客户端ID
 
 client_secret varchar(20) 客户端(加密)密钥

服务器接口验证,PHP的实现过程如下:

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'); //拒绝访问
 
    }
 
    //验证通过,返回数据给客户端
 
?>    

二. user_token

其责任是保护用户的用户名和密码免遭多次提交,以防止密码泄漏。

如果界面要求用户登录,则访问过程如下:

1、用户提交“用户名”和“密码”以登录(条件允许,此步骤最好使用https);

2、成功登录后,服务器将返回一个user_token。生成规则如下:

user_token = md5('用户的uid'+'Unix时间戳')= etye0fgkgk4ca2ttdsl0ae9a5dd77471fgf

服务器使用数据表来维护user_token的状态。表格设计如下:

字段名称和字段类型如下:

     user_id int(11) 用户ID
 
   user_token varchar(36) 用户token
 
   expire_time int 过期时间(Unix时间戳)    

服务器生成user_token后,它将其返回给客户端(由其自身存储)。当客户端每次请求接口时,如果该接口要求用户登录才能访问,则需要将user_id和user_token发送回服务器,服务器会接受它。在这两个参数之后,您需要执行以下步骤:

1、检查user_token的有效性;

2、删除过期的user_token表记录;

3、根据user_id和user_token获取表记录。如果表记录不存在,则直接返回错误。如果该记录存​​在,请继续下一步;

4、更新user_token的到期时间(推迟api接口用户登录token,以确保不会删除有效期内的连续操作);

5、返回接口数据;

接口用例如下:添加测试接口

URL: http://www.api.com/demo/index/add-demo?client_id=wt373uesksklwkskx36sr5858t6&api_token=880fed4ca2aabd20ae9eessa74711de2&user_token=etye0fgkgk4ca2asehxlejeje5dd77471fgf&user_id=12
 
请求方式: POST
 
POST参数:title=哈喽&content=我的世界
 
返回数据:
 
{
 
    'code' => 1, // 1:成功 0:失败
 
    'msg' => '成功/失败,无权访问'
 
    'data' => []
 
}

上一篇: 大众点评推出国内首个O2O开发者平台(图)

下一篇:没有了

上一篇: 大众点评推出国内首个O2O开发者平台(图)

下一篇:没有了