Parolalar Teknik Bir Yük
<p>B2B SaaS platformu geliştirirken, standart e-posta ve parola kimlik doğrulama yöntemini kullanmak eğilimindeyiz. Ancak modern kurumsal yazılımlarda parolaları saklamak büyük bir mimari risk oluşturuyor. Kullanıcılar parolalarını birçok farklı sitede tekrar kullanıyor. Eğer üçüncü taraf bir forum sızarsa ve bir kullanıcının parolası ifşa olursa, kötü niyetli kişiler kimlik bilgisi doldurma (credential stuffing) yöntemleri ile SaaS platformunuza giriş yapabilir. Veritabanınız güvenli olsa bile, ihlalinizi sorgulayan siz olacaksınız.</p>
<p>Kurumsal düzeyde güvenlik sağlamak için, kimlik doğrulama yükünü özel kimlik sağlayıcılarına (Google, Microsoft Azure AD, Okta) kaydırmalısınız. Çözüm, <strong>OAuth2 ile Tek Oturum Açma (SSO)</strong> kullanmaktır.</p>
<h2>Laravel Socialite'e Giriş</h2>
<p>Laravel, karmaşık OAuth2 el sıkışmasını (yönlendirmeler, durumu doğrulama, token değişimi) akıcı ve şık bir API'ye dönüştüren resmi bir paket olan <strong>Socialite</strong>'ı sunmaktadır. Güvenli bir Google SSO akışı tasarlayalım.</p>
<h3>Adım 1: Veritabanı Mimarisi</h3>
<p>İlk olarak, <code>users</code> tablosunu OAuth girişlerini destekleyecek şekilde güncellememiz gerekiyor. Parola sütununu nullable (boş olabilir) yapıyoruz (SSO kullanıcılarının parolası yok) ve bir <code>provider_id</code> ekliyoruz.</p>
<pre><code>use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class UpdateUsersTableForSSO extends Migration
{
public function up(): void
{
Schema::table(‘users’, function (Blueprint $table) {
$table->string(‘password’)->nullable()->change(); // SSO için Nullable
$table->string(‘auth_provider’)->nullable(); // örneğin, ‘google’
$table->string(‘provider_id’)->nullable(); // Google’dan gelen Benzersiz ID
// Kritik: Kullanıcıların farklı sağlayıcılar aracılığıyla birden fazla hesap yaratmadığından emin ol
$table->unique('email');
});
}}
<h3>Adım 2: OAuth Kontrolcü Mantığı</h3>
<p>Kontrolcü, kullanıcıyı Google'a yönlendiren ve Google geri döndüğünde doğrulama tokensını işleyen iki yolu yönetir.</p>
<pre><code>namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Laravel\Socialite\Facades\Socialite;
use Exception;
class SSOController extends Controller
{
/
- Kullanıcıyı Google kimlik doğrulama sayfasına yönlendir.
*/
public function redirectToGoogle()
{
return Socialite::driver(‘google’)->redirect();
}
/
* Google'dan gelen geri dönüşü işle.
*/
public function handleGoogleCallback()
{
try {
// 1. Geçici kodu güvenli bir kullanıcı profili ile değiştir
$googleUser = Socialite::driver('google')->user();
// 2. Mevcut kullanıcıyı bul veya güvenli bir şekilde yeni bir kullanıcı oluştur
$user = User::updateOrCreate(
['email' => $googleUser->getEmail()], // E-posta ile eşleştir
[
'name' => $googleUser->getName(),
'auth_provider' => 'google',
'provider_id' => $googleUser->getId(),
// Parola null kalır
]
);
// 3. Kullanıcıyı giriş yap ve oturumu yeniden oluştur
Auth::login($user);
request()->session()->regenerate();
return redirect()->intended('/dashboard');
} catch (Exception $e) {
// Hata kaydını tut ve güvenli bir şekilde giriş sayfasına yönlendir
return redirect('/login')->with('error', 'Kimlik doğrulama başarısız oldu. Lütfen tekrar deneyin.');
}
}}
<h2>Mühendislik Yatırım Getirisi</h2>
<p>SSO'yu uygulayarak, Google ve Microsoft'un güvenlik için harcadığı milyarlarca doları otomatik olarak miras alırsınız. Eğer bir kullanıcı Google hesabında fiziksel donanım anahtarları veya 2FA etkinleştirirse, SaaS platformunuz aynı güvenlik seviyesini otomatik olarak elde eder. Parola sıfırlama taleplerini ortadan kaldırır, platformunuzu kimlik bilgisi doldurma (credential stuffing) saldırılarından korur ve kurumsal müşteriler için sorunsuz bir başlangıç deneyimi sağlar.</p>Kaynak: Orijinal Makale


