Aufbau einer sicheren Laravel-API mit JWT-Authentifizierung ⋆ ALexHost SRL

Testen Sie Ihre Fähigkeiten mit unseren Hosting-Diensten und erhalten Sie 15% Rabatt!

Code an der Kasse verwenden:

Skills
06.12.2024

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. Dieser Leitfaden 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. Installieren Sie es mit Composer:

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 in Ihrem Projekt erstellt.

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 zu Ihrer .env-Datei hinzu, der für die Kodierung und Dekodierung der Token verwendet wird.

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 wie folgt:

'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
'guards' => [
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],

],
Dies weist Laravel an, den jwt-Treiber für API-Anfragen zu verwenden und sich mit dem users-Anbieter zu authentifizieren.

Schritt 5: Erstellen des Benutzermodells und Migration

Wenn Sie noch kein Benutzermodell erstellt haben, können Sie es zusammen mit seiner Migrationsdatei erstellen:

php artisan make:model User -m

Öffnen Sie die erstellte Migrationsdatei in database/migrations/ und fügen Sie die erforderlichen Felder wie Name, E-Mail und Passwort hinzu:

public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->timestamps();
});
}

Führen Sie die Migration aus, um die Benutzertabelle zu erstellen:

php artisan migrate

Schritt 6: Implementierung von JWT-Methoden im Benutzermodell

Implementieren Sie im Benutzermodell(app/Models/User.php) die Schnittstelle JWTSubject und die erforderlichen Methoden:

use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements JWTSubject
{
public function getJWTIdentifier()
{
return $this->getKey(); // Normalerweise der Primärschlüssel (id)
}
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 Methoden für die Registrierung eines Benutzers, die Anmeldung und die Abmeldung hinzu:

<?php
namespace App\Http\Controllers;
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
{
// User Registration
public function register(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
$token = JWTAuth::fromUser($user);
return response()->json(['token' => $token], 201);
}
// User Login
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (!$token = Auth::attempt($credentials)) {
return response()->json(['error' => 'Invalid credentials'], 401);
}
return response()->json(['token' => $token]);
}
// Logout User (Invalidate Token)
public function logout()
{
Auth::logout();
return response()->json(['message' => 'Successfully logged out']);
}
// Get Authenticated User
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 hinzu:

use App\Http\Controllers\AuthController;
use Illuminate\Support\Facades\Route;
Route::post('registrieren', [AuthController::class, 'registrieren']);
Route::post('login', [AuthController::class, 'login']);
// Geschützte Routen (erfordern JWT-Token)
Route::middleware('auth:api')->group(function () {
Route::post('logout', [AuthController::class, 'logout']);
Route::get('me', [AuthController::class, 'me']);
});

Diese Routen behandeln die Benutzerregistrierung, die Anmeldung, die Abmeldung und das Abrufen des authentifizierten Benutzers.

Schritt 9: Schützen von API-Routen

Um andere API-Routen zu schützen, können Sie die auth:api-Middleware verwenden. Wenn Sie zum Beispiel eine Ressourcenroute für Beiträge haben:

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
      Host: your-domain.com
      Content-Type: application/json
      {
      "name": "John Doe",
      "email": "john@example.com",
      "password": "password",
      "password_confirmation": "password"
      }
    • Log in:
      POST /api/login
      Host: your-domain.com
      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 wie GET /api/me zuzugreifen, fügen Sie das Token in den Authorization-Header ein:
    Authorization: Bearer <token>

Schritt 11: Auffrischen von JWT-Tokens (optional)

Um ein Token zu aktualisieren, kann man eine Methode im AuthController hinzufügen:

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.

Testen Sie Ihre Fähigkeiten mit unseren Hosting-Diensten und erhalten Sie 15% Rabatt!

Code an der Kasse verwenden:

Skills