Aufbau einer sicheren Laravel-API mit JWT-Authentifizierung
Bei der Erstellung von APIs mit Laravel ist die Gewährleistung einer sicheren Authentifizierung von entscheidender Bedeutung, insbesondere beim Umgang mit Benutzerdaten. JSON Web Tokens (JWT) bieten eine robuste Methode für die Handhabung der Authentifizierung in zustandslosen Anwendungen und ermöglichen eine sichere Übertragung von Benutzerinformationen zwischen den Parteien. Diese Anleitung führt Sie durch den Prozess der Erstellung einer sicheren Laravel-API mit JWT-Authentifizierung.
Voraussetzungen
- Grundlegende Kenntnisse von PHP und Laravel.
- Laravel auf Ihrem Rechner installiert (vorzugsweise Laravel 9 oder neuer).
- Composer installiert.
- MySQL oder eine andere Datenbank, die für Ihre Anwendung eingerichtet ist.
Schritt 1: Erstellen Sie ein neues Laravel-Projekt
Erstellen Sie zunächst ein neues Laravel-Projekt mit Composer:
composer create-project laravel/laravel laravel-jwt-api
Navigieren Sie zu Ihrem Projektverzeichnis:
cd laravel-jwt-api
Schritt 2: JWT-Authentifizierungspaket installieren
Das am häufigsten verwendete Paket für die JWT-Authentifizierung in Laravel ist tymon/jwt-auth
composer require tymon/jwt-auth
Nach der Installation des Pakets veröffentlichen Sie die JWT-Konfiguration:
php artisan vendor:publish --provider="Tymon\JWTAuth\Provider\LaravelServiceProvider"
Dadurch wird eine Datei
config/jwt.php
Schritt 3: Erzeugen des geheimen JWT-Schlüssels
Erzeugen Sie einen geheimen Schlüssel, den JWT für die Signierung von Token verwenden wird:
php artisan jwt:secret
Dies fügt einen
JWT_SECRET-Eintrag
.env-Datei
Schritt 4: Authentifizierung einrichten
Um die JWT-Authentifizierung einzurichten, müssen Sie den Standardschutz für Ihre API konfigurieren. Aktualisieren Sie die Datei
config/auth.php
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
‘guards’ => [‘api’ => [
‘driver’ => ‘jwt’,
‘provider’ => ‘users’,
],
],
Dies weist Laravel an, den
jwt-Treiber
users-Anbieter
Schritt 5: Erstellen des Benutzermodells und Migration
Wenn Sie noch kein
Benutzermodell
php artisan make:model Benutzer -m
Öffnen Sie die erstellte Migrationsdatei in
database/migrations/
Name
E-Mail
Passwort
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->string('Passwort');
$table->Zeitstempel();
});
}
Führen Sie die Migration aus, um die
Benutzertabelle
php artisan migrate
Schritt 6: Implementierung von JWT-Methoden im Benutzermodell
Implementieren Sie im
Benutzermodell
(app/Models/User.php
JWTSubject
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements JWTSubject{
public function getJWTIdentifier()
{
return $this->getKey();
}
public function getJWTCustomClaims(){
return [];
}
}
Schritt 7: Authentifizierungscontroller erstellen
Erstellen Sie einen Controller für die Benutzerauthentifizierung:
php artisan make:controller AuthController
Fügen Sie in
AuthController.php
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Tymon\JWTAuth\Facades\JWTAuth;
class AuthController extends Controller{
public function register(Request $request)
{
$request->validate([
name’ => ‘required|string|max:255’,
’email’ => ‘required|string|email|max:255|unique:users’,
‘passwort’ => ‘erforderlich|string|min:6|bestätigt’,
]);
$benutzer = Benutzer::erstellen([name’ => $Anfrage->Name,
’email’ => $anforderung->email,
‘Passwort’ => Hash::make($Anfrage->Passwort),
]);
$token = JWTAuth::fromUser($user);return response()->json([‘token’ => $token], 201);
}
public function login(Request $request)
{
$credentials = $request->only(’email’, ‘password’);
if (!$token = Auth::attempt($credentials)) {
return response()->json([‘error’ => ‘Ungültige Anmeldedaten’], 401);
}
return response()->json([‘token’ => $token]);
}
public function logout()
{
Auth::logout();
return response()->json([‘message’ => ‘Erfolgreich abgemeldet’]);
}
public function me()
{
return response()->json(Auth::user());
}
}
Schritt 8: Definieren von API-Routen
Fügen Sie Routen für die Authentifizierung in
routes/api.php
app\Http\Controllers\AuthControllerverwenden;
Route::post(‘register’,[AuthController::class, ‘register’]);
Route::post(‘login’,[AuthController::class, ‘login’]);
Route::post(‘logout’,[AuthController::class, ‘logout’])->middleware(‘auth:api’);
Route::get(‘me’,[AuthController::class, ‘me’])->middleware(‘auth:api’);
Diese Routen behandeln die Benutzerregistrierung, die Anmeldung, die Abmeldung und das Abrufen des authentifizierten Benutzers.
Schritt 9: Schutz der API-Routen
Um andere API-Routen zu schützen, können Sie die
auth:api-Middleware
Beiträge
Route::middleware('auth:api')->group(function () {
Route::resource('posts', PostController::class);
});
Damit wird sichergestellt, dass nur authentifizierte Benutzer auf diese Routen zugreifen können.
Schritt 10: Testen der API
Sie können Ihre API mit Tools wie Postman oder cURL testen.
- Registrieren Sie einen Benutzer:
POST /api/register
Inhalt-Typ: application/json{
“name”: “John Doe”,
“email”: “john@example.com”,
“password”: “passwort”,
“passwort_bestaetigung”: “passwort”
} - Anmelden:
POST /api/login
Content-Type: application/json{
“email”: “john@example.com”,
“password”: “password”
}Dadurch wird ein Token zurückgegeben, das Sie für die Authentifizierung anderer Anfragen verwenden können.
- Zugriff auf geschützte Route: Um auf eine geschützte Route wiezuzugreifen, fügen Sie das Token in den
GET /api/me
ein:Authorization-Header
Authorization: Überbringer
Schritt 11: Auffrischen von JWT-Tokens (optional)
Um ein Token zu aktualisieren, kann man eine Methode im
AuthController
public function refresh()
{
$token = Auth::refresh();
return response()->json(['token' => $token]);
}
Hinzufügen der Route für die Auffrischung:
Route::post('refresh', [AuthController::class, 'refresh'])->middleware('auth:api');
Schlussfolgerung
Mit diesem Leitfaden haben Sie eine sichere Laravel-API mit JWT-Authentifizierung erstellt, die die Registrierung und Anmeldung von Benutzern sowie den Zugriff auf geschützte Routen ermöglicht. Mit JWT können Sie einen zustandslosen Authentifizierungsmechanismus beibehalten, was besonders nützlich für die Skalierung von APIs ist. Mit dieser Einrichtung können Sie die Authentifizierungslogik Ihrer Anwendung weiter anpassen und zusätzliche Funktionen integrieren, wie z. B. rollenbasierte Zugriffskontrolle und Aktualisierungs-Tokens für langlebige Sitzungen.