ホームページ  >  記事  >  バックエンド開発  >  アプリインターフェーストークンの詳しい説明

アプリインターフェーストークンの詳しい説明

小云云
小云云オリジナル
2018-03-05 13:05:568505ブラウズ

1. まず、インターフェイスとは何かについて話しましょう: 簡単に言うと、インターフェイスはサーバーが他のプログラムまたはクライアントにデータを返すために使用するブリッジです。

2. インターフェイスの役割: 固定データを返します。たとえば、クライアントが =1 を渡すと、サーバーは a の名前を返し、クライアントは a=2 を渡し、サーバーは他のデータを返さずに a の性別を返します。

3. 署名の役割: インターフェースとデータのセキュリティを確保するため

4. トークンの役割: PC ログインセッションと同じ、ユーザーエントリのための唯一のチケットとして

例: アプリ間のインターフェースサーバー、Java、php 異なるプログラム間のインターフェース、これらのインターフェースは一般に json 形式でデータを送信します

そのため、モバイル端末とサーバー間のデータ送信の相対的な安全性を確保するには、インターフェースを暗号化して送信する必要があります

1. トークンの設計目的:
APP 側には同じセッションメカニズムがなく、PC 側にも同じセッションメカニズムがあるため、ユーザーがログインしているかどうかを判断することができず、ユーザーのステータスを維持できないため、セッションを実現するために必要なメカニズムです。これがトークンの役割です。トークンはユーザーがログインするための唯一のチケットです。トークンが APP から送信される限り、サーバー側と一貫性があることを証明できます。ログインしました (映画を観に行くときと同じように、チケットを購入する必要があり、そのチケットで入場できます)

2. トークン設計の種類:
(1) サードパーティのログイン タイプ: この種類トークンの形式は OAuth2.0 に基づいており、定期的な更新 (2 時間ごとの更新など) が特徴です。これは、データ ソースにログイン許可を与える際にその有効期間を制御する必要があるためです。そうしないと、サードパーティ サーバーはユーザーの同意なしにデータ ソース サーバーからユーザー データを無期限に取得できます

(2) APP 自己使用ログイン タイプ: この種類のトークンが使用されます。一般的なアプリでは、サードパーティを経由せず、ユーザーがデータソースサーバーから直接データを取得するため、トークンの一意性を確保するだけで済む設計です。ログイン トークンの実装手順を使用します。

(1) データベース ユーザー テーブルにトークン フィールドと time_out を追加します。 トークン有効期限フィールド

(2) ユーザーがログインするとき (登録時の自動ログインにも必要)、トークンと有効期限はテーブルに保存されます
(3) 他のインターフェイスを呼び出す前に、トークンが正しいかどうかを判断します。正しい場合は続行し、間違っている場合は、ユーザーを再度ログインさせます

4. APP 独自のログイン トークン実装コード (会社独自のフレームワークとロジック。主にロジックに依存します。コードを直接コピーしないでください):

(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错误验证失败
    }

関連推奨事項:

PHP の WeChat パブリック アカウント検証トークン、返信コンテンツ、メッセージをプッシュする方法

PHP 開発APP インターフェースのビデオチュートリアル

PHP アプリインターフェースの作成と JSON データを返す例について共有します

以上がアプリインターフェーストークンの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHP仕様の分析次の記事:PHP仕様の分析