Maison  >  Article  >  développement back-end  >  Explication détaillée du jeton d'interface d'application

Explication détaillée du jeton d'interface d'application

小云云
小云云original
2018-03-05 13:05:568494parcourir

1. Parlons d'abord de ce qu'est une interface : En termes simples, une interface est un pont utilisé par le serveur pour renvoyer des données à d'autres programmes ou clients

2. interface : retour selon des paramètres fixes Données fixes, par exemple, si le client passe a=1, alors le serveur renverra le nom de a, si le client passe a=2, le serveur renverra le sexe de a, mais ne renverra pas d'autres données .

3. Le rôle de la signature : pour assurer la sécurité des interfaces et des données

4. Le rôle du token : le même que la session de connexion PC, comme seul ticket d'entrée de l'utilisateur

Par exemple : l'interface entre l'application et le serveur, et l'interface entre les différents programmes entre java et php Ces interfaces transmettent généralement les données au format json

Donc, afin d'assurer le relatif. sécurité de la transmission des données entre le terminal mobile et le serveur, l'interface doit être cryptée Transmission

1. Objectif de conception du jeton :
Parce que le côté APP n'a pas le même mécanisme de session que le côté PC , il ne peut pas déterminer si l'utilisateur est connecté et ne peut pas conserver le statut d'utilisateur, un mécanisme est donc nécessaire pour y parvenir. Session, c'est le rôle du jeton. Le jeton est le seul ticket permettant à l'utilisateur de se connecter. comme le jeton envoyé par l'APP est cohérent avec le serveur, il peut prouver que vous êtes connecté (tout comme lorsque vous allez au cinéma, vous devez acheter un billet, il suffit de conserver le billet) Vous pouvez entrer)

2. Types de conception de jeton :
(1) Type de connexion tiers : ce type de jeton a la forme du access_token de WeChat, et le principe de conception est basé sur OAuth2.0. Ses caractéristiques sont régulièrement actualisées (par exemple). exemple, actualisé toutes les deux heures). Le but est que lorsque la source de données accorde une autorisation de connexion à un serveur tiers, elle doit contrôler sa période de validité et ses autorisations. Sinon, le serveur tiers peut obtenir des utilisateurs du serveur de source de données. indéfiniment sans le consentement de l'utilisateur. Données arbitraires

(2) Type de connexion à usage automatique de l'APP : ce type de jeton est le jeton utilisé par les APP générales car il ne passe pas par un tiers, mais directement par l'utilisateur. obtient les données du serveur source de données, la conception est donc plus décontractée et n'a besoin que de s'assurer de l'unicité de son jeton

3. Étapes de mise en œuvre du jeton de connexion à usage automatique de l'APP :
(1) Ajouter le champ de jeton et champ de délai d'expiration du jeton time_out à la table utilisateur de la base de données
(2) La connexion de l'utilisateur (également requise pour la connexion automatique lors de l'inscription) génère un jeton et le délai d'expiration et le stocke dans la table
(3) Avant en appelant d'autres interfaces, jugez si le jeton est correct. S'il est correct, continuez, s'il est faux, laissez l'utilisateur se reconnecter

4. le cadre et la logique, dépendent principalement de la logique, ne copiez pas le code directement) :

(1)//下面是用户登陆时把token插入数据库的代码
$logininfo['token'] = appuser::settoken();
$time_out = strtotime("+7 days");
db::setByPk('u_adver', array('token1' => $logininfo['token'], 'time_out' => $time_out), $logininfo['id']);


(2)//下面是生成token方法代码
    public static function settoken()
    {
        $str = md5(uniqid(md5(microtime(true)),true));  //生成一个不会重复的字符串
        $str = sha1($str);  //加密
        return $str;
    }

(3)//下面是每个接口都必须调用的token验证代码,验证具体实现是在(4)
$args['token'] = $_POST['token'];
$tokencheck = appuser::checktokens($args['token'], 'u_adver');
        if ($tokencheck != 90001)
        {
            $res['msg_code'] = $tokencheck;
            v_json($res);
        }


(4)//token验证方法,db::是数据库操作类,这里设置是token如果七天没被调用则需要重新登陆(也就是说用户7天没有操作APP则需要重新登陆),如果某个接口被调用,则会重新刷新过期时间
    public static function checktokens($token, $table)
    {
        $res = db::getOneForFields($table, 'time_out', 'token1 = ?', array($token));
        if (!empty($res))
        {
            if (time() - $res['time_out'] > 0) 
            {
                return 90003;  //token长时间未使用而过期,需重新登陆
            }
            $new_time_out = time() + 604800;//604800是七天
            if (db::setWhere($table, array('time_out' => $new_time_out), 'token1 = ?', array($token)))
            {
                return 90001;  //token验证成功,time_out刷新成功,可以获取接口信息
            }
        }
        return 90002;  //token错误验证失败
    }

Recommandations associées :

Méthodes PHP pour vérifier les jetons, répondre au contenu et pousser messages aux comptes publics WeChat

Tutoriel vidéo sur l'interface de l'application de développement PHP

Partagez l'interface de l'application d'écriture PHP et renvoyez l'instance de données JSON

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn