当前位置:网站首页>Actual combat simulation │ JWT login authentication
Actual combat simulation │ JWT login authentication
2022-07-04 21:03:00 【Hua Weiyun】
Token The certification process
- As the most popular cross domain authentication solution ,
JWT(JSON Web Token)Loved by developers , The main process is as follows : - The client sends an account and password to request login
- The server receives the request , Verify whether the account and password pass
- After successful verification , The server will generate a unique
token, And return it to the client - Client received
token, Store it incookieperhapslocalStrogein - After that, every time the client sends a request to the server , Will pass
cookieperhapsheaderTake with youtoken - Server side validation
tokenThe effectiveness of the , The data of the response is returned only after passing

Token Certification benefits
- Support cross domain access :
CookieCross domain access is not allowed , That's rightTokenThere is no mechanism , The premise is that the transmitted user authentication information passesHTTPHead transmission - No state :
TokenThe mechanism does not need storage on the serversessionInformation , becauseTokenIt contains the information of all users who log in , Just on the client sidecookieOr local media storage status information - More applicable : As long as it's support
httpProtocol client , You can usetokenauthentication . - Don't need to consider CSRF: Because no longer rely on
cookie, So usingtokenThe authentication method will not happenCSRF, So there is no need to considerCSRFDefense
JWT structure
- One
JWTIt's actually a string , It consists of three parts :Head、loadAndSignature. Middle point.Divided into three parts . Be carefulJWTThere is no line break inside .

- Head / header
headerIt's made up of two parts :tokenThe type ofJWTAnd algorithm name :HMAC、SHA256、RSA
{ "alg": "HS256", "typ": "JWT"}- load / Payload
PayloadPart of it is also aJSONobject , It is used to store the data that needs to be transferred .JWTSpecify seven default fields to choose from .- In addition to the default fields , You can add any field you want , Generally, after the user logs in successfully , Store user information here
iss: The issuer exp: Due time sub: The theme aud: user nbf: Not available until iat: Release time jti:JWT ID Used to identify the JWT{ "iss": "xxxxxxx", "sub": "xxxxxxx", "aud": "xxxxxxx", "user": [ 'username': ' Geek flying rabbit ', 'gender': 1, 'nickname': ' Flying rabbit ' ] }- Signature / Signature
- The signature part is on the above Head 、 load Data signature with two parts of data
- To ensure that the data is not tampered with , You need to specify a key , And this key is usually only known by you , And stored on the server
- The code to generate the signature is generally as follows :
// among secret It's the key String signature = HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)JWT Basic use
- The client receives the
JWT, Can be stored inCookieInside , It can also be stored inlocalStorage - then Every time the client communicates with the server , Take this with you
JWT - hold
JWTSave inCookieSend request inside , It can't beCross domain - It's better to put it in
HTTPRequested header informationAuthorizationIn the field
fetch('license/login', { headers: { 'Authorization': 'X-TOKEN' + token }})actual combat : Use JWT Login authentication
Use here
ThinkPHP6IntegrateJWTLogin and authenticate for actual combat simulationinstall JWT Expand
composer require firebase/php-jwt- Package generation JWT And decryption methods
<?php/** * Desc: JWT authentication * Author: autofelix * Time: 2022/07/04 */namespace app\services;use app\Helper;use Firebase\JWT\JWT;use Firebase\JWT\Key;class JwtService{ protected $salt; public function __construct() { // Get a unique string from the configuration information , You can write whatever you like md5('token') $this->salt = config('jwt.salt') || "autofelix"; } // jwt Generate public function generateToken($user) { $data = array( "iss" => 'autofelix', // Issuer Can be null "aud" => 'autofelix', // Face users , Can be null "iat" => Helper::getTimestamp(), // The issuance of time "nbf" => Helper::getTimestamp(), // Take effect immediately "exp" => Helper::getTimestamp() + 7200, //token Expiration time Two hours "user" => [ // Record user information 'id' => $user->id, 'username' => $user->username, 'truename' => $user->truename, 'phone' => $user->phone, 'email' => $user->email, 'role_id' => $user->role_id ] ); $jwt = JWT::encode($data, md5($this->salt), 'HS256'); return $jwt; } // jwt Decrypt public function chekToken($token) { JWT::$leeway = 60; // Subtract... From the current time 60, Leave some room for time $decoded = JWT::decode($token, new Key(md5($this->salt), 'HS256')); return $decoded; }}- After the user logs in , Generate JWT identification
<?phpdeclare (strict_types=1);namespace app\controller;use think\Request;use app\ResponseCode;use app\Helper;use app\model\User as UserModel;use app\services\JwtService;class License{ public function login(Request $request) { $data = $request->only(['username', 'password', 'code']); // .... Relevant logic for verification ... $user = UserModel::where('username', $data['username'])->find(); // Verify by generating JWT, Return to front end save $token = (new JwtService())->generateToken($user); return json([ 'code' => ResponseCode::SUCCESS, 'message' => ' Login successful ', 'data' => [ 'token' => $token ] ]); }}- Middleware verifies whether the user logs in
- stay
middleware.phpRegister middleware
<?php// Global middleware definition file return [ // ... Other middleware // JWT verification \app\middleware\Auth::class];- After registering middleware , Improve the verification logic in the permission verification middleware
<?phpdeclare (strict_types=1);namespace app\middleware;use app\ResponseCode;use app\services\JwtService;class Auth{ private $router_white_list = ['login']; public function handle($request, \Closure $next) { if (!in_array($request->pathinfo(), $this->router_white_list)) { $token = $request->header('token'); try { // jwt verification $jwt = (new JwtService())->chekToken($token); } catch (\Throwable $e) { return json([ 'code' => ResponseCode::ERROR, 'msg' => 'Token Validation failed ' ]); } $request->user = $jwt->user; } return $next($request); }}边栏推荐
猜你喜欢

Common verification rules of form components -1 (continuously updating ~)

What are the functional modules of RFID warehouse management system solution
![[server data recovery] a case of RAID5 data recovery stored in a brand of server](/img/a2/e03dcb30276d115969fbd00f1830dc.png)
[server data recovery] a case of RAID5 data recovery stored in a brand of server

【1200. 最小絕對差】

【服务器数据恢复】某品牌服务器存储raid5数据恢复案例

What if the WiFi of win11 system always drops? Solution of WiFi total drop in win11 system

The concept and application of hash table

Advantages of RFID warehouse management system solution

分析伦敦银走势图的技巧

字节测试工程师十年经验直击UI 自动化测试痛点
随机推荐
Reinforcement learning - learning notes 2 | value learning
强化学习-学习笔记2 | 价值学习
go笔记(3)Go语言fmt包的用法
What are the functional modules of RFID warehouse management system solution
How does the computer save web pages to the desktop for use
What is the development of block hash quiz game system? Hash quiz game system development (case mature)
网件r7000梅林系统5g不稳定 5g信号经常掉线解决方法
阿里测试师用UI自动化测试实现元素定位
Win11亮度被锁定怎么办?Win11亮度被锁定的解决方法
[solution] paddlepaddle 2 X call static graph mode
记一次重复造轮子(Obsidian 插件设置说明汉化)
【申博攻略】六.如何联系心仪的博导
Some suggestions for interface design
福昕PDF编辑器v10.1.8绿色版
电脑页面不能全屏怎么办?Win11页面不能全屏的解决方法
LeetCode 8. 字符串转换整数 (atoi)
BFC interview Brief
heatmap.js图片热点热力图插件
阿里云国际版CDN的优势
go笔记(1)go语言介绍以及特点