design

Laravel’de API Güvenliği: JWT ve OAuth2 Entegrasyonu

March 23, 2025

Merhaba arkadaşlar, bugün sizlere Laravel’de API güvenliği konusunu ve JWT (JSON Web Token) ile OAuth2 entegrasyonunu anlatacağım. API’ler, modern web uygulamalarının vazgeçilmez bir parçasıdır ve güvenlik, API geliştirirken en önemli konulardan biridir. Laravel, API güvenliğini sağlamak için JWT ve OAuth2 gibi güçlü araçlar sunar. Gelin, bu konuları adım adım inceleyelim.


API Güvenliği Neden Önemlidir?

API’ler, uygulamalar arasında veri alışverişi sağlar. Ancak, bu veri alışverişi sırasında güvenlik açıkları oluşabilir. Bu nedenle, API’lerin güvenliğini sağlamak için doğru yöntemler kullanmak önemlidir. Laravel, JWT ve OAuth2 gibi araçlarla API güvenliğini kolayca sağlamanıza yardımcı olur.


JWT (JSON Web Token) Nedir?

JWT, JSON formatında şifrelenmiş bir token’dır. Bu token, kullanıcı kimlik doğrulaması ve yetkilendirme işlemleri için kullanılır. JWT, üç bölümden oluşur: HeaderPayload ve Signature. Bu yapı, token’ın güvenliğini sağlar ve yetkisiz erişimleri engeller.


Laravel’de JWT Entegrasyonu

Laravel’de JWT entegrasyonu yapmak için tymon/jwt-auth paketini kullanabilirsiniz. Bu paket, JWT tabanlı kimlik doğrulama işlemlerini kolaylaştırır.


JWT Paketini Kurma:

composer require tymon/jwt-auth


Paketi kurduktan sonra, JWT yapılandırmasını yapmanız gerekiyor. Aşağıdaki komutu çalıştırarak JWT yapılandırma dosyasını oluşturabilirsiniz:

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"


Bu komut, config/jwt.php dosyasını oluşturacaktır. Bu dosyada, JWT ile ilgili ayarları yapılandırabilirsiniz.


JWT ile Kimlik Doğrulama

JWT ile kimlik doğrulama işlemleri için öncelikle bir AuthController oluşturabilirsiniz. Bu controller, kullanıcı girişi ve token oluşturma işlemlerini gerçekleştirecektir.


AuthController Kodu:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Tymon\JWTAuth\Facades\JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
use App\Models\User;

class AuthController extends Controller
{
    public function login(Request $request)
    {
        $credentials = $request->only('email', 'password');

        try {
            if (!$token = JWTAuth::attempt($credentials)) {
                return response()->json(['error' => 'Geçersiz kimlik bilgileri'], 401);
            }
        } catch (JWTException $e) {
            return response()->json(['error' => 'Token oluşturulamadı'], 500);
        }

        return response()->json(compact('token'));
    }

    public function register(Request $request)
    {
        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => bcrypt($request->password),
        ]);

        $token = JWTAuth::fromUser($user);

        return response()->json(compact('user', 'token'), 201);
    }
}


Bu kod, kullanıcı girişi ve kayıt işlemlerini gerçekleştirir. Giriş işlemi başarılı olduğunda, bir JWT token’ı oluşturulur ve kullanıcıya döndürülür.


JWT ile Yetkilendirme

JWT token’ı, kullanıcının kimliğini doğrulamak ve yetkilendirme işlemlerini gerçekleştirmek için kullanılır.


Örneğin, bir kullanıcının profil bilgilerini almak için:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Tymon\JWTAuth\Facades\JWTAuth;

class ProfileController extends Controller
{
    public function getProfile(Request $request)
    {
        try {
            $user = JWTAuth::parseToken()->authenticate();
        } catch (\Exception $e) {
            return response()->json(['error' => 'Geçersiz token'], 401);
        }

        return response()->json(compact('user'));
    }
}

Bu kod, JWT token’ını kullanarak kullanıcının kimliğini doğrular ve profil bilgilerini döndürür.


OAuth2 Nedir?

OAuth2, yetkilendirme işlemleri için kullanılan bir protokoldür. Bu protokol, üçüncü taraf uygulamaların kullanıcı adına erişim sağlamasına izin verir. Laravel, OAuth2 entegrasyonu için laravel/passport paketini sunar.


Laravel’de OAuth2 Entegrasyonu

Laravel’de OAuth2 entegrasyonu yapmak için laravel/passport paketini kullanabilirsiniz. Bu paket, OAuth2 tabanlı yetkilendirme işlemlerini kolaylaştırır.


Passport Paketini Kurma:

composer require laravel/passport


Paketi kurduktan sonra, Passport yapılandırmasını yapmanız gerekiyor. Aşağıdaki komutları çalıştırarak gerekli tabloları oluşturabilir ve anahtarları üretebilirsiniz:

php artisan migrate
php artisan passport:install


Bu komutlar, OAuth2 için gerekli tabloları oluşturacak ve anahtarları üretecektir.


OAuth2 ile Yetkilendirme

OAuth2 ile yetkilendirme işlemleri için öncelikle bir AuthController oluşturabilirsiniz. Bu controller, kullanıcı girişi ve token oluşturma işlemlerini gerçekleştirecektir.


AuthController Kodu:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Laravel\Passport\HasApiTokens;

class AuthController extends Controller
{
    use HasApiTokens;

    public function login(Request $request)
    {
        $credentials = $request->only('email', 'password');

        if (Auth::attempt($credentials)) {
            $user = Auth::user();
            $token = $user->createToken('MyApp')->accessToken;
            return response()->json(compact('token'));
        } else {
            return response()->json(['error' => 'Geçersiz kimlik bilgileri'], 401);
        }
    }
}


Bu kod, kullanıcı girişi başarılı olduğunda bir OAuth2 token’ı oluşturur ve kullanıcıya döndürür.

Laravel’de API Güvenliğinin Avantajları

  • Güvenlik: JWT ve OAuth2, API’lerin güvenliğini sağlamak için güçlü yöntemler sunar.
  • Esneklik: Farklı yetkilendirme yöntemleri kullanarak, uygulamanızı kolayca genişletebilirsiniz.
  • Performans: JWT ve OAuth2, performansı artırarak kullanıcı deneyimini iyileştirir.


Laravel’de API güvenliği, JWT ve OAuth2 gibi güçlü araçlarla kolayca sağlanabilir. Eğer API’lerinizin güvenliğini artırmak ve kullanıcı deneyimini iyileştirmek istiyorsanız, bu yöntemleri mutlaka kullanmalısınız. Bir sonraki yazımda, Laravel’de Loglama: Hata Takibi ve Analizi konusuna değineceğim. Görüşmek üzere!

6 + 2 =