整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          JWT- 使用JWT+PHP實現登錄認證

          JWT: 使用JWT+PHP實現登錄認證

          先了解一下什么是JWT?JWT是一個簡單的PHP的第三方庫,用于在PHP中編碼和解碼JSON WEB令牌jwt 。一般用composer來管理依賴關系 使用composer require firebase/php-jwt來安裝這個庫(詳見 php-jwt庫:https://github.com/firebase/php-jwt)

          再來介紹一下用戶登錄鑒權流程

          1、用戶使用用戶名和密碼來請求服務器

          2、服務器驗證用戶信息

          3、服務器通過驗證生成一個token返回給客戶端

          4、客戶端存儲這個token,并在后面的每一次請求中在請求頭上帶上這個token

          5、服務端驗證這個token token正確就返回數據 token錯誤就返回錯誤信息

          start 首先我們需要一個html表單用于后臺的登錄


          <div id="showpage" style="display: none">

          <div class="form-group">

          <label for="username">用戶名</label>

          <input type="text" class="form-control" id="username" placeholder="請輸入用戶名">

          </div>

          <div class="form-group">

          <label for="password">密碼</label>

          <input type="password" class="form-control" id="password" placeholder="請輸入密碼">

          </div>

          <button type="submit" id="sub-btn" class="btn btn-default">登錄</button> <br/>

          <p class="bg-warning" style="padding: 10px;">演示用戶名和密碼都是<code>demo</code></p>

          </div>

          <div id="user" style="display: none">

          <p>歡迎<strong id="uname">

          </strong>,您已登錄,<a href="javascript:;" id="logout">退出>></a>

          </p>

          </div>

          // 使用axios庫

          <script src="https://cdn.bootcss.com/axios/0.17.1/axios.min.js"></script>

          <script>

          let jwt=localStorage.getItem('jwt');

          // token 保存在localstorage里面 判斷有沒有token

          if (jwt) {

          axios.defaults.headers.common['X-token']=jwt;

          axios.get('user.php')

          .then(function (response) {

          if (response.data.result==='success') {

          document.querySelector('#showpage').style.display='none';

          document.querySelector('#user').style.display='block';

          document.querySelector('#uname').innerHTML=response.data.info.data.username;

          } else {

          document.querySelector('#showpage').style.display='block';

          console.log(response.data.msg);

          }

          })

          .catch(function (error) {

          console.log(error);

          });

          } else {

          document.querySelector('#showpage').style.display='block';

          }

          document.querySelector("#sub-btn").onclick=function(){

          let username=document.querySelector("#username").value;

          let password=document.querySelector("#password").value;

          var params=new URLSearchParams();

          params.append('user',username);

          params.append('pass',password);

          axios.post(

          'user.php?action=login',

          params,

          );

          .then(response)=> {

          if(response.data.result==='success'){

          // 本地存儲token

          localStorage.setItem('jwt',response.data.jwt);

          // 把token存儲到header里面

          axios.defaults.headers.common['X-token']=response.data.jwt;

          axios.get('user.php').then(function(response){

          if(response.data.result==='success'){

          document.querySelector("#showpage").style.display='none';

          document.querySelector("#user").style.display='block';

          document.querySelector("#uname").innerHTML=response.data.info.data.username;

          }else{

          }

          })

          }else{

          console.log(response.data.msg);

          }

          }

          .catch(function(error){

          console.log(error);

          });

          }

          </script>

          服務器端

          首先使用php-jwt庫

          使用composer安裝php-jwt,接收到登錄用戶名和密碼后,PHP驗證用戶名和密碼是否正確,如果用戶名和密碼準確無誤,那么就簽發token,在token中,我們可以定義token的簽發者、過期時間等等,并返回給前端。注意在簽發token時,我們需要定義一個密鑰,這個密鑰是一個私鑰,實際應用中是保密的不可告訴別人。

          后臺代碼user.php

          <?php

          date_default_timezone_set("PRC"); //系統使用北京時間

          require 'vendor/autoload.php';

          use \Firebase\JWT\JWT;

          // 私有的密鑰

          define('KEY', '1gHuiop975cdashyex9Ud23ldsvm2Xq');

          // header('Access-Control-Allow-Origin:*');

          $res['result']='failed';

          $action=isset($_GET['action']) ? $_GET['action'] : '';

          if ($action=='login') {

          if ($_SERVER['REQUEST_METHOD']=='POST') {

          $username=htmlentities($_POST['user']);

          $password=htmlentities($_POST['pass']);

          if ($username=='demo' && $password=='demo') { //用戶名和密碼正確,則簽發tokon

          $nowtime=time();

          $token=[

          'iss'=> 'http://www.helloweba.net', //簽發者

          'aud'=> 'http://www.helloweba.net', //jwt所面向的用戶

          'iat'=> $nowtime, //簽發時間

          'nbf'=> $nowtime + 10, //在什么時間之后該jwt才可用

          'exp'=> $nowtime + 600, //過期時間-10min

          'data'=> [

          'userid'=> 1,

          'username'=> $username

          ]

          ];

          // 生成token

          $jwt=JWT::encode($token, KEY);

          $res['result']='success';

          $res['jwt']=$jwt;

          } else {

          $res['msg']='用戶名或密碼錯誤!';

          }

          }

          echo json_encode($res);

          } else {

          $jwt=isset($_SERVER['HTTP_X_TOKEN']) ? $_SERVER['HTTP_X_TOKEN'] : '';

          if (empty($jwt)) {

          $res['msg']='You do not have permission to access.';

          echo json_encode($res);

          exit;

          }

          try {

          JWT::$leeway=60;

          $decoded=JWT::decode($jwt, KEY, ['HS256']);

          $arr=(array)$decoded;

          if ($arr['exp'] < time()) {

          $res['msg']='請重新登錄';

          } else {

          $res['result']='success';

          $res['info']=$arr;

          }

          } catch(Exception $e) {

          $res['msg']='Token驗證失敗,請重新登錄';

          }

          echo json_encode($res);

          }


          用戶每次請求都要帶上后端簽發的token,后端獲取請求中的token,PHP中使用$_SERVER['HTTP_X_TOKEN']就可以獲取token值。這個X_TOKEN就是在我們前端的請求header頭信息中。

          然后PHP拿到這個token后,解密分析token值,返回給前端即可。

          我們可以看到,在用戶鑒權的過程中并沒有使用Session或者Cookie,服務端無需存儲用戶會話信息。只用了一個Token串,建立前后端的驗證的數據傳遞,實現了有效的登錄鑒權過程。

          于前陣子我寫的HTTP DoS發生程序,改寫了一下,實現登錄自己搭建的web滲透測試網站。這個網站叫MYZOO,我讀研一時候,老師提供的一個實驗網站,用來學習Web安全,一個微型的交易網站,可以實現更新簡介,查詢,轉賬操作。

          實際上,在我們所謂的黑客看來,就是Get請求,Post請求嘛,基于這個:

          login 函數:用來登錄,獲取cookie和connect句柄
          profile 函數:一個POST請求,用來更新數據庫中的個人簡介
          query 函數:一個GET請求,用來向數據庫查詢個人ZOOBAR信息

          以上三個算是核心函數了,雖然實現了登錄,訪問,查詢,退出。但是呢?還是感覺沒啥味道!然而,這通常是小白邁向Web安全,走向傳奇黑客的必經之路。誰不是這么走過來的呢?

          CSRF跨站請求偽造, XSS 跨站腳本攻擊,SQL注入攻擊,等都是基于對網站有一定的了解,那么怎么就叫對網站有一定的了解呢? 我的回答是:

          1.會自己搭建網站
          2.會寫爬蟲訪問自己的網站

          某些我的讀者,私信咨詢怎么學習黑客?這個話題太大,我很難回答好。知乎現在的學術氛圍越來越不友好了,答題就加分,不答題就減分。那么答題質量如何保證呢?越來越水唄。不管是學習黑客,還是學習其他什么專業技能,都需要堅持。很多小白都是腦子一熱,找一堆技能樹,黑客教學視頻,學了一陣子,就學不進去了,自然而然的被黑客圈子拒絕在外。

          如果非得說個學習路線:

          科班路線:我還是推薦上學時期的網絡安全試驗課目錄,我以前回答過

          非科班路線:3年前的看雪論壇,其他幾乎都是種韭菜


          我個人感覺:關注自己喜歡的領域就好,我喜歡黑客的感覺。

          堅持向往,慢慢成長,你一定會是矚目的黑客。

          如何只花1元搭建個人博客網站

          作者 ailx10

          去查看

          OOC:Massive Open Online Courses,即為大型公開在線課程,在短短的幾年間風靡全球,在這個開放的平臺上,你可以隨時隨地接觸到世界各地的名師風采。mooc似乎讓學習資源的分配更為平等。無論你在哪里,只有可以聯網就可以學習。今天就推薦幾個過你知名MOOC網站,程序員一定要好好利用線上學習資源。

          1.學堂在線

          簡介:學堂在線是免費公開的MOOC(大規模開放在線課程)平臺,是國家教育部MOOC研究中心官方合作平臺,致力于通過來自國內外一流名校開設的免費網絡學習課程,為公眾提供系統的高等教育,讓每一個中國人都有機會享受優質教育資源。通過和清華大學在線教育研究中心、以及國內外知名大學的緊密合作,學堂在線將不斷增加課程的種類和豐富程度。

          推薦語:依托于清華師資力量,教學質量很高。

          2. 中國大學MOOC

          簡介:國大學MOOC(慕課) 是愛課程網攜手云課堂打造的在線學習平臺,每一個有提升愿望的人,都可以在這里學習中國最好的大學課程,學完還能獲得認證證書。中國大學MOOC是國內最好的中文MOOC學習平臺,擁有來自于39所985高校的頂級課程,最好最全的大學課程,與名師零距離。

          推薦語:課程覆蓋很全,商業化相對程度較高。

          3.慕課網

          簡介:慕課網(IMOOC)是國內最大的IT技能學習平臺。慕課網提供了豐富的移動端開發、php開發、web前端、android開發以及html5等視頻教程資源公開課。并且富有交互性及趣味性,你還可以和朋友一起編程。

          推薦語:程序員很適合去這個網站,技術課程覆蓋很全。

          4.MOOC中國

          簡介:MOOC中國是為國內小伙伴推薦最好慕課的中文慕課網。

          推薦語:原創課程較少,更多的是資源推薦,也可以發現不錯的課程,不適合程序員。

          寫在最后:

          說出你的需求,讓我做你的好助手,好管家,協助你來發現更多的優質資源。

          留下你的評論與意見,集思廣益共享價值。

          回見啦,我是呆傻萌,每晚10點不見不散。

          古言古語:

          昨夜西風凋碧樹,獨上高樓,望盡天涯路。


          主站蜘蛛池模板: 精品国产一区二区三区www| 一级毛片完整版免费播放一区| 麻豆精品人妻一区二区三区蜜桃| 亚洲Av无码国产一区二区| 色妞AV永久一区二区国产AV | 一区二区精品在线观看| 无码人妻久久一区二区三区免费 | 国产精品无码不卡一区二区三区| 极品人妻少妇一区二区三区| 一区二区三区四区在线观看视频| 亚洲国产韩国一区二区| 国产综合一区二区| 亚洲精品日韩一区二区小说| 亚洲AV香蕉一区区二区三区| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 精品一区二区三区色花堂| 海角国精产品一区一区三区糖心| 无码人妻AⅤ一区二区三区| 任你躁国产自任一区二区三区 | 精品一区二区三区四区| 2021国产精品一区二区在线| 欧洲精品码一区二区三区免费看 | 国产一区二区在线看| 精品视频一区二区三区四区五区| 中文字幕AV一区二区三区人妻少妇| www一区二区三区| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 精品无码av一区二区三区 | 中文字幕在线精品视频入口一区 | 午夜性色一区二区三区不卡视频| 精品一区二区在线观看| 亚洲一区二区三区在线播放| 无码一区二区三区视频| 在线观看日韩一区| 水蜜桃av无码一区二区| 国产一区二区三区播放心情潘金莲| 亚洲一区二区三区在线观看蜜桃| 无码人妻久久一区二区三区免费丨 | 成人免费一区二区无码视频| 日韩一区二区三区视频| 亚洲乱码日产一区三区|