Heim >Backend-Entwicklung >PHP-Tutorial >Wie verwende ich PHP für die JWT-Authentifizierung und -Authentifizierung?

Wie verwende ich PHP für die JWT-Authentifizierung und -Authentifizierung?

WBOY
WBOYOriginal
2023-08-07 10:12:201392Durchsuche

Wie verwende ich PHP für die JWT-Authentifizierung und -Authentifizierung?

JWT (JSON Web Token) ist ein offener Standard für Authentifizierung und Autorisierung. Es überträgt Daten auf sichere und zuverlässige Weise zwischen Client und Server und ermöglicht es dem Server, die Identität des Benutzers zu überprüfen, der die Anfrage sendet. In diesem Artikel wird erläutert, wie Sie mit PHP die JWT-Authentifizierung und Authentifizierungsfunktionen implementieren.

  1. Abhängige Bibliotheken installieren
    JWT hängt von zwei Bibliotheken ab: Firebase PHP JWT und lcobucci/jwt. Sie können Composer verwenden, um diese beiden Bibliotheken zu installieren:
composer require firebase/php-jwt lcobucci/jwt
  1. JWT generieren
    Zuerst müssen wir ein JWT generieren, nachdem sich der Benutzer erfolgreich angemeldet hat, und es an den Client senden. Das Folgende ist ein Beispielcode:
<?php

use FirebaseJWTJWT;
use LcobucciJWTBuilder;
use LcobucciJWTSignerHmacSha256;

// 用户登录成功后,生成JWT
function generateJWT($userId, $secretKey) {
    $time = time();
    $token = (new Builder())
        ->issuedBy('example.com') // 发行者
        ->permittedFor('example.com') // 接受者
        ->identifiedBy('1', true) // 标识符
        ->issuedAt($time) // 发行时间
        ->expiresAt($time + 3600) // 过期时间
        ->withClaim('userId', $userId) // 自定义声明
        ->getToken(new Sha256(), new Key($secretKey));

    return $token;
}

$jwt = generateJWT(1, 'your-secret-key');
echo $jwt;
  1. JWT überprüfen
    Nachdem der Server die Anfrage des Clients erhalten hat, müssen wir die Legitimität des JWT überprüfen und die Identitätsinformationen des Benutzers erhalten. Hier ist ein Beispielcode:
<?php

use FirebaseJWTJWT;

// 验证并解析JWT
function verifyJWT($jwt, $secretKey) {
    try {
        $decoded = JWT::decode($jwt, $secretKey, ['HS256']);
        return $decoded;
    } catch (Exception $e) {
        return null;
    }
}

$jwt = $_SERVER['HTTP_AUTHORIZATION'];
$decoded = verifyJWT($jwt, 'your-secret-key');

if ($decoded) {
    $userId = $decoded->userId;
    echo "用户ID:$userId";
} else {
    echo "无效的JWT";
}
  1. Refresh JWT
    JWT läuft nach einiger Zeit ab, aber wir können den Aktualisierungstoken verwenden, um den Gültigkeitszeitraum zu verlängern. Das Folgende ist ein Beispielcode:
<?php

use FirebaseJWTJWT;
use LcobucciJWTBuilder;
use LcobucciJWTSignerHmacSha256;

// 刷新JWT
function refreshJWT($jwt, $secretKey) {
    $current = time();
    $decoded = JWT::decode($jwt, $secretKey, ['HS256']);
    
    if ($decoded->exp - $current > 1800) { // 如果剩余有效期超过30分钟,则不刷新JWT
        return $jwt;
    }
    
    $newToken = (new Builder())
        ->issuedBy($decoded->iss)
        ->permittedFor($decoded->aud)
        ->identifiedBy($decoded->jti, true)
        ->issuedAt($current)
        ->expiresAt($current + 3600)
        ->withClaim('userId', $decoded->userId)
        ->getToken(new Sha256(), new Key($secretKey));
        
    return $newToken;
}

$jwt = $_SERVER['HTTP_AUTHORIZATION'];
$refreshedJWT = refreshJWT($jwt, 'your-secret-key');

echo $refreshedJWT;

Durch die obigen Schritte können wir JWT-Authentifizierung und Authentifizierungsfunktionen einfach mit PHP implementieren. Natürlich erfordern praktische Anwendungen mehr Sicherheitsüberlegungen und -praktiken sowie Anpassungen basierend auf spezifischen Anforderungen. Ich hoffe, dieser Artikel hilft Ihnen, JWT zu verstehen und zu verwenden!

Das obige ist der detaillierte Inhalt vonWie verwende ich PHP für die JWT-Authentifizierung und -Authentifizierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn