API权限控制

在API不存在用户登录这样的概念,我们是通过令牌来管理用户身份的。在传统网站用户登录的概念,转换成用户获取令牌,这个令牌,是代表用户身份的 。虽然都是类似用户输入账号密码的东西,但是理解和概念上时不一样的。API是用户拿到令牌,这个令牌具有用户的身份,而且这个身份是分级别的。有些级别是管理员级别,有些级别是普通用户级别。

用户在每一次调用接口的时候,都需要携带他所获取的令牌,如果令牌合法,那我们认为你有权限调用接口,否则没有权限访问。

API权限控制_第1张图片

用户一定要获取一个Token,其代表用户身份的。客户端要获取令牌需要携带账号密码,然后获取我们服务器getToken接口。这样就完成用户具体注册的内容,最终客户端是可以拿到服务器的Token的,这个Token就是用于用户的身份识别。我们获取令牌是为了携带令牌,访问API接口。

API权限控制_第2张图片

这个流程和上面流程大同小异。客户端携带令牌访问下单接口。在我们接口内部业务处理中,他需要比对令牌,根据令牌确认用户身份。有些用户身份是可以访问下单接口的,有些是不能的。不是说携带了令牌,就一定可以访问接口,令牌也许在技术上是合法的,同时身份不对也不行。接口如何验证Token?首先Token一定要有,如果这个Token在用户表根本没有,说明Token是伪造的 ,随意搞的字符串,肯定不合法,别想访问接口,以上是第一个验证。第二个验证,你有Token还不行,你还得没有过期,因为Token是有过期时间的,不可能用户获得令牌,5年过去了还能访问。Token有一个有效期,过了有效期同样不合法。第三层面的验证是,Token合法,没有过有效期,还要验证Token的权限分组,位于某一个分组,并且这个分组有权限对下单分组进行调用的,才可以调用我们的下单接口,否则没有权限一样拒绝访问。这是最简单的接口校验模型3层。

function getRandChar($length)
{
    $str = null;
    $strPol ="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
    $max = strlen($strPol) - 1;

    for($i=0;
        $i < $length;
        $i++){
        $str .= $strPol[rand(0,$max)];
    }
}


你可能感兴趣的:(PHP开发)