


Vollständige Aufzeichnung des tatsächlichen Simulationsprozesses der JWT-Anmeldeauthentifizierung
Apr 03, 2024 pm 01:22 PMNach sorgfältiger Zusammenstellung durch den PHP-Editor Banana stellen wir Ihnen eine beliebte vollständige Aufzeichnung des tatsächlichen Entwicklungssimulationsprozesses vor – die tatsächliche Simulation der JWT-Anmeldeauthentifizierung. JWT (JSON Web Token) ist ein offener Standard für die Authentifizierung. Er generiert ein Token (Token), nachdem sich der Benutzer erfolgreich angemeldet hat, und der Benutzer trägt dieses Token in nachfolgenden Anfragen zur Identitätsauthentifizierung mit. Dieser Artikel bietet eine detaillierte Analyse des Implementierungsprozesses der JWT-Anmeldeauthentifizierung und eine umfassende praktische Demonstrationsaufzeichnung. Dabei bringen wir Ihnen das Verständnis der Prinzipien von JWT und deren Anwendung in der tatsächlichen Entwicklung näher. Egal, ob Sie Einsteiger oder erfahrener Entwickler sind, in diesem Artikel können Sie wertvolles Wissen und praktische Erfahrungen sammeln.
Token-Authentifizierungsprozess
- JWT (JSON WEB Token) ist bei Entwicklern sehr beliebt. Der Hauptprozess ist wie folgt: Der Kunde sendet die Kontonummer und Passwort Anmeldeanfrage
- Der Server empfängt die Anfrage und überprüft, ob das Kontopasswort gültig ist
- Nach erfolgreicher Überprüfung generiert der Server ein eindeutiges Token und sendet es an den Client zurück
- Der Client empfängt das Token und speichert es in ein Cookie oder Jedes Mal, wenn der Client nach
- in localStroge eine Anfrage an den Server sendet, wird das Token über das Cookie oder den Header übertragen
- Der Server überprüft die Gültigkeit des Tokens und gibt die Antwortdaten erst zurück, nachdem er es übergeben hat
- Unterstützung für domänenübergreifenden Zugriff: Dies gilt nicht für den Token-Mechanismus. Voraussetzung ist, dass die übertragenen Benutzerauthentifizierungsinformationen über
- Http übertragen werden Header. Stateless: Der Token-Mechanismus muss nicht auf der Serverseite gespeichert werden, da der Token selbst die Informationen aller angemeldeten Benutzer enthält, sondern nur die Statusinformationen im Cookie des Clients gespeichert werden müssen Lokale Medien
- Breitere Anwendbarkeit: Solange der Client das http-Protokoll unterstützt, kann die Token-Authentifizierung verwendet werden.
- CSRF muss nicht berücksichtigt werden: Da es nicht mehr auf Cookies basiert, erfolgt bei Verwendung der Token-Authentifizierung kein CSRF, sodass keine CSRF-Verteidigung berücksichtigt werden muss. JWT-Struktur. Ein JWT ist eigentlich ein String Es besteht aus drei Teilen: Header, Nutzlast und Signatur. Verwenden Sie einen Punkt in der Mitte, um es in drei Teile zu teilen. Beachten Sie, dass es im JWT keine Zeilenumbrüche gibt.
- ?
- Header/Header
header
besteht aus zwei Teilen: token
Typ JWT
und Name: H<br>Mac
SHA256
, RSA
{
"alg": "HS256",
"typ": "JWT"
}
header
由两部分组成: token
的类型 JWT
和算法名称:H<strong class="keylink">Mac</strong>
、SHA256
、RSA
{ "iss": "xxxxxxx", "sub": "xxxxxxx", "aud": "xxxxxxx", "user": [ 'username': '极客飞兔', 'gender': 1, 'nickname': '飞兔小哥' ] }
? 载荷 / Payload
Payload
部分也是一个 <strong class="keylink">js</strong>ON
对象,用来存放实际需要传递的数据。JWT
指定七个默认字段供选择。
除了默认字段之外,你完全可以添加自己想要的任何字段,一般用户登录成功后,就将用户信息存放在这里
iss:发行人
exp:到期时间
sub:主题
aud:用户
nbf:在此之前不可用
iat:发布时间
jti:JWT ID用于标识该JWT
// 其中secret 是密钥 String signature = HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
- ? 签名 / Signature
- 签名部分是对上面的 头部、载荷 两部分数据进行的数据签名
- 为了保证数据不被篡改,则需要指定一个密钥,而这个密钥一般只有你知道,并且存放在服务端
- 生成签名的代码一般如下:
fetch('license/login', { headers: { 'Authorization': 'X-TOKEN' + token } })
JWT 基本使用
- 客户端收到服务器返回的 JWT,可以储存在 Cookie 里面, 也可以储存在 localStorage
- 然后 客户端每次与服务器通信,都要带上这个 JWT
- 把 JWT 保存在 Cookie 里面发送请求,这样不能跨域
- 更好的做法是放在 HTTP 请求的头信息 Authorization 字段里面
composer require firebase/php-jwt
实战:使用 JWT 登录认证
这里使用 Think<strong class="keylink">PHP</strong>6
整合 JWT
登录认证进行实战模拟
? 安装 JWT 扩展
<?php namespace app\services; use app\Helper; use Firebase\JWT\JWT; use Firebase\JWT\Key; class JwtService { protected $salt; public function __construct() { //从配置信息这种或取唯一字符串,你可以随便写比如md5('token') $this->salt = config('jwt.salt') || "autofelix"; } // jwt生成 public function generateToken($user) { $data = array( "iss" => 'autofelix',//签发者 可以为空 "aud" => 'autofelix', //面象的用户,可以为空 "iat" => Helper::getTimestamp(), //签发时间 "nbf" => Helper::getTimestamp(), //立马生效 "exp" => Helper::getTimestamp() + 7200, //token 过期时间 两小时 "user" => [ // 记录用户信息 '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解密 public function chekToken($token) { JWT::$leeway = 60; //当前时间减去60,把时间留点余地 $decoded = JWT::decode($token, new Key(md5($this->salt), 'HS256')); return $decoded; } }
? 封装生成 JWT 和解密方法
<?php declare (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']); // ....进行验证的相关逻辑... $user = UserModel::where('username', $data['username'])->find(); // 验证通过生成 JWT, 返回给前端保存 $token = (new JwtService())->generateToken($user); return json([ 'code' => ResponseCode::SUCCESS, 'message' => '登录成功', 'data' => [ 'token' => $token ] ]); } }
? 用户登录后,生成 JWT 标识
<?php // 全局中间件定义文件 return [ // ...其他中间件 // JWT验证 \app\middleware\Auth::class ];
? 中间件验证用户是否登录
在 Zusätzlich zu den Standardfeldern können Sie beliebige Felder hinzufügen. Nachdem sich ein Benutzer erfolgreich angemeldet hat, werden die Benutzerinformationen im Allgemeinen hier gespeichert 总而言之,如果使用了分布式,切只能在session和jwt里面选的时候,就一定要选jwt。 Das obige ist der detaillierte Inhalt vonVollständige Aufzeichnung des tatsächlichen Simulationsprozesses der JWT-Anmeldeauthentifizierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!middleware.php
Payload</code Der > Teil ist auch ein <code></strong>js</p>ON
-Objekt, das zum Speichern der tatsächlichen Daten verwendet wird, die übertragen werden müssen. JWT
gibt sieben Standardfelder zur Auswahl an. 🎜iss: Aussteller 🎜exp: Ablaufzeit🎜sub: Topic 🎜aud: Benutzer 🎜nbf: Vorher nicht verfügbar 🎜iat: Veröffentlichungszeit 🎜jti: JWT-ID zur Identifizierung dieses JWT 🎜
🎜<?php
declare (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 验证
$jwt = (new JwtService())->chekToken($token);
} catch (\Throwable $e) {
return json([
'code' => ResponseCode::ERROR,
'msg' => 'Token验证失败'
]);
}
$request->user = $jwt->user;
}
return $next($request);
}
}
Think🎜PHP🎜6
integriert die JWT
-Anmeldeauthentifizierung für eine praktische Simulation🎜🎜? 🎜JWT-Erweiterung installieren🎜🎜🎜rrreee🎜? Generierungs- und Entschlüsselungsmethode🎜🎜🎜rrreee🎜 🎜Nachdem sich der Benutzer angemeldet hat, eine JWT-Identifikation generieren🎜🎜🎜rrreee🎜? 🎜Middleware überprüft, ob der Benutzer angemeldet ist🎜🎜🎜Registrieren Sie die 🎜Middleware in middleware.php
🎜🎜🎜rrreee🎜Verbessern Sie nach der Registrierung der Middleware die Überprüfungslogik in der Berechtigungsüberprüfungs-Middleware🎜<?php
declare (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 验证
$jwt = (new JwtService())->chekToken($token);
} catch (\Throwable $e) {
return json([
'code' => ResponseCode::ERROR,
'msg' => 'Token验证失败'
]);
}
$request->user = $jwt->user;
}
return $next($request);
}
}
附:为什么使用jwt而不使用session

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



In diesem Artikel wird ausführlich erläutert, wie PHP Zeilen in CSV formatiert und Dateizeiger schreibt. Ich hoffe, dass Sie nach dem Lesen dieses Artikels etwas daraus lernen können. Zeilen in CSV formatieren und in den Dateizeiger schreiben Schritt 1: Dateizeiger öffnen $file=fopen("path/to/file.csv","w"); in CSV-Strings umwandeln. Die Funktion akzeptiert die folgenden Parameter: $file: Dateizeiger $fields: CSV-Felder als Array $delimiter: Feldtrennzeichen (optional) $enclosure: Feldanführungszeichen (

In diesem Artikel wird das Ändern der aktuellen umask in PHP ausführlich erläutert. Der Herausgeber hält dies für recht praktisch, daher teile ich es Ihnen als Referenz mit. Ich hoffe, dass Sie nach dem Lesen dieses Artikels etwas gewinnen können. Überblick über die Änderung der aktuellen umask durch PHP umask ist eine PHP-Funktion, mit der die Standarddateiberechtigungen für neu erstellte Dateien und Verzeichnisse festgelegt werden. Es akzeptiert ein Argument, eine Oktalzahl, die die Blockierungsberechtigung darstellt. Um beispielsweise die Schreibberechtigung für neu erstellte Dateien zu verhindern, würden Sie 002 verwenden. Methoden zum Ändern von umask Es gibt zwei Möglichkeiten, die aktuelle umask in PHP zu ändern: Verwendung der Funktion umask(): Die Funktion umask() ändert direkt die aktuelle umask. Seine Syntax ist: intumas

In diesem Artikel wird ausführlich erläutert, wie PHP den MD5-Hash von Dateien berechnet. Der Herausgeber hält dies für recht praktisch, daher teile ich es Ihnen als Referenz mit. Ich hoffe, dass Sie nach dem Lesen dieses Artikels etwas gewinnen können. PHP berechnet den MD5-Hash einer Datei. MD5 (MessageDigest5) ist ein Einweg-Verschlüsselungsalgorithmus, der Nachrichten beliebiger Länge in einen 128-Bit-Hashwert fester Länge umwandelt. Es wird häufig verwendet, um die Dateiintegrität sicherzustellen, die Datenauthentizität zu überprüfen und digitale Signaturen zu erstellen. Berechnen des MD5-Hash einer Datei in PHP PHP bietet mehrere Methoden zum Berechnen des MD5-Hash einer Datei: Verwenden Sie die Funktion md5_file(). Die Funktion md5_file() berechnet direkt den MD5-Hash-Wert der Datei und gibt einen 32-stelligen Wert zurück

In diesem Artikel wird ausführlich erläutert, wie PHP Dateien auf eine bestimmte Länge kürzt. Der Herausgeber hält dies für recht praktisch, daher teile ich es Ihnen als Referenz mit. Ich hoffe, dass Sie nach dem Lesen dieses Artikels etwas gewinnen können. Einführung in die PHP-Dateikürzung Die Funktion file_put_contents() in PHP kann verwendet werden, um Dateien auf eine bestimmte Länge zu kürzen. Unter Abschneiden versteht man das Entfernen eines Teils des Endes einer Datei, wodurch die Dateilänge verkürzt wird. Syntax file_put_contents($filename,$data,SEEK_SET,$offset);$filename: der Dateipfad, der gekürzt werden soll. $data: Leerer String, der in die Datei geschrieben werden soll. SEEK_SET: Wird als Anfang der Datei bezeichnet

In diesem Artikel wird ausführlich erläutert, wie PHP nach dem Umdrehen eines Schlüsselwerts ein Array zurückgibt. Der Herausgeber hält dies für recht praktisch, daher teile ich es Ihnen als Referenz mit. Ich hoffe, dass Sie nach dem Lesen dieses Artikels etwas gewinnen können. PHP-Schlüsselwert-Flip Der Array-Schlüsselwert-Flip ist eine Operation für ein Array, bei der die Schlüssel und Werte im Array ausgetauscht werden, um ein neues Array mit dem ursprünglichen Schlüssel als Wert und dem ursprünglichen Wert als Schlüssel zu generieren. Implementierungsmethode In PHP können Sie das Schlüsselwert-Umdrehen eines Arrays mit den folgenden Methoden durchführen: array_flip()-Funktion: Die array_flip()-Funktion wird speziell für Schlüsselwert-Umdrehungsvorgänge verwendet. Es erhält ein Array als Argument und gibt ein neues Array mit vertauschten Schlüsseln und Werten zurück. $original_array=[

In diesem Artikel wird die digitale Kodierung der von PHP im vorherigen MySQL-Vorgang zurückgegebenen Fehlermeldung ausführlich erläutert. Der Herausgeber hält dies für recht praktisch, daher teile ich es Ihnen als Referenz mit. Ich hoffe, dass Sie nach dem Lesen dieses Artikels etwas gewinnen können . . Verwenden von PHP zum Zurückgeben von MySQL-Fehlerinformationen Einführung in die numerische Kodierung Bei der Verarbeitung von MySQL-Abfragen können Fehler auftreten. Um diese Fehler effektiv behandeln zu können, ist es wichtig, die numerische Kodierung von Fehlermeldungen zu verstehen. Dieser Artikel führt Sie durch die Verwendung von PHP, um die numerische Kodierung von MySQL-Fehlermeldungen zu erhalten. Methode zum Erhalten der numerischen Kodierung von Fehlerinformationen 1. mysqli_errno() Die Funktion mysqli_errno() gibt die aktuellste Fehlernummer der aktuellen MySQL-Verbindung zurück. Die Syntax lautet wie folgt: $erro

In diesem Artikel wird ausführlich erläutert, wie PHP ermittelt, ob ein bestimmter Schlüssel in einem Array vorhanden ist. Der Herausgeber hält dies für sehr praktisch, daher teile ich es Ihnen als Referenz mit und hoffe, dass Sie nach dem Lesen dieses Artikels etwas gewinnen können. PHP ermittelt, ob ein angegebener Schlüssel in einem Array vorhanden ist: In PHP gibt es viele Möglichkeiten, festzustellen, ob ein angegebener Schlüssel in einem Array vorhanden ist: 1. Verwenden Sie die Funktion isset(): isset($array["key"]) Diese Funktion gibt einen booleschen Wert zurück, true, wenn der angegebene Schlüssel vorhanden ist, andernfalls false. 2. Verwenden Sie die Funktion array_key_exists(): array_key_exists("key",$arr

In diesem Artikel wird das Erhalten von Pi in PHP ausführlich erläutert. Der Herausgeber hält es für recht praktisch, daher teile ich es Ihnen als Referenz mit. Ich hoffe, dass Sie nach dem Lesen dieses Artikels etwas gewinnen können. Einführung in die Berechnung von Pi mit PHP Pi (π) ist das Verhältnis des Umfangs zum Durchmesser eines Kreises. Es ist eine irrationale Zahl und kann nicht mit einer endlichen Anzahl von Ziffern ausgedrückt werden. In PHP können Sie die integrierte Funktion M_PI verwenden, um einen ungefähren Wert von Pi zu erhalten. M_PI-Funktion Die M_PI-Funktion gibt einen ungefähren Wert von Pi mit einer Genauigkeit von 14 Dezimalstellen zurück. Es handelt sich um eine Konstante von PHP, sodass Sie für die Verwendung keine Parameter verwenden müssen. Syntaxausgabe 3.14159265358979 Alternative Methoden Zusätzlich zur M_PI-Funktion gibt es einige Alternativen
