Projeleriniz API kimlik doğrulaması gerektirdiğinde, genellikle bir token şeması oluşturmak için hızlı bir çözüm düşünmek cazip gelebilir. Ancak, bu tür bir yaklaşımın getirilerini her zaman göz önünde bulundurmalısınız. Özellikle kimlik doğrulama ve yetkilendirme işlemleri, güvenlik riskleri taşıdığı için dikkatlice tasarlanmalıdır.
İlk olarak bazı terimler
İlk olarak bazı terimler
Ability (scope): Bir token’ın ne tür işlemleri gerçekleştirebileceğini tanımlayan etiket. Örneğin, reports:read. Önemli olan etiketin kendisi değil, kodunuzun bu yetkiyi gerçekten kontrol etmesi.
Revocation: Bir token’ı iptal ederken hesabın geri kalanını etkilememek. Görünüşte basit olsa da, birçok yerel sistem bunu düzgün bir şekilde yapamayabilir.
Sanctum: Laravel’in, kendi kontrolünüzdeki şeyler için hafif bir token yönetim sistemi. OAuth işlemlerine ihtiyaç duymadan, her iki ucu da güvenli kabul edersiniz.
Passport: Gerçek OAuth2 uygulaması, kontrol edemediğiniz bir üçüncü tarafın kimlik bilgilerine ihtiyaç duyulduğunda kullanılır. İzin türleri, yenileme döngüsü gibi tüm özellikleri içerir.
Blast radius: Token’ı aldıktan sonra yapabileceklerinizi ifade eden terim. Token’ı verdiğiniz gün karar verilmiş olur, sızdığı gün değil.
Kodda bu nasıl görünür
Kodda bu nasıl görünür
Gerçek bir scope ile token oluşturma:
// Bu entegrasyonın gerçekten ihtiyaç duyduğu yetkileri verin
$token = $user->createToken(
name: 'reporting-integration',
abilities: ['reports:read'],
expiresAt: now()->addDays(30),
);
return response()->json(['token' => $token->plainTextToken]);
Yetkileri kontrol etme:
public function export(Request $request)
{
if (! $request->user()->tokenCan('reports:read')) {
abort(403);
}
// dışa aktarma işlemini gerçekleştir
}
Bir token’ı iptal etmek:
// Belirli bir cihazın token'ını iptal edin, hesabın geri kalanını etkilemeyin
$user->tokens()->where('name', )->delete();
Bizim başımıza gelenler
Bizim başımıza gelenler
Bir süre önce, bir müşterimiz için üçüncü taraf bir analitik sağlayıcısına bağlantı sağladık. O dönemde sadece bir API token’ı verdik ve bunu yaparken kapsamı daraltmayı düşünmedik. İki yıl boyunca unutuldu. Sonunda, bu sağlayıcı saldırıya uğradı ve bizim token’ımız da onların sisteminin içinde sızdı.
Olay, bizim hatamız değildi; ama etkisiyle yüzleşmek zorunda kaldık. Token, sadece bazı verilere erişim sağlamakta değil, tüm müşteri kayıtlarına ulaşmada da kullanılabiliyordu. Bu durumda dar kapsamlar belirlemediğimiz için ne kadar zarar verebileceğimiz belirsizdi.
Neden bunu artık kendimiz yapmıyoruz
Neden bunu artık kendimiz yapmıyoruz
Token kimlik doğrulaması, altında yatan Laravel sürümüne göre sürekli değişebilecek birçok sorun içerebilir. Sanctum ve Passport’a geçiş, işleri basitleştirdi ve güvenli bir şekilde yönetmemizi sağladı. Kapsam, son kullanım tarihi ve iptal gibi işlevler zaten entegre durumda mevcut.
Kapsamlandırma çoğu kişinin atladığı bir aşama
Kapsamlandırma çoğu kişinin atladığı bir aşama
Birçok geliştirici, token’ların başlangıçta düzgün bir şekilde kapsamlandırılmasını göz ardı ediyor. Bunun sebebi genellikle “sonradan sıkılaştırırız” düşüncesidir. Ancak bu erteleme genelde meydana gelmez. Her token’ı baştan itibaren özel yetkilerle vermek, bu işlemden elde edilen güvenliği artırır.
Sanctum ve Passport arasında seçim yapma
Sanctum ve Passport arasında seçim yapma
Seçim, ihtiyaçlarınıza bağlıdır. Sanctum, her iki ucu da kontrol ettiğiniz durumlarda idealdir. Passport ise dış bir tarafın kimlik bilgilerine ihtiyaç duyduğunuzda gereklidir. Her iki durumu da göz önünde bulundurmalısınız.
// Üçüncü taraf istemci kendini tanıtmalıdır, bir kullanıcı değil
Route::post('/oauth/token', [AccessTokenController::class, 'issueToken']);
// grant_type=client_credentials&client_id=...&client_secret=...&scope=orders:read
// Verilen kapsam ile bir route'u koruma
Route::middleware(['auth:api', 'scope:orders:read'])->get('/api/orders', [OrderController::class, 'index']);
Neler kazandık
Neler kazandık
Başlangıçta sağlanan kolaylık, zamanla kendini gösterecektir. Bir token ile fazla erişime sahip olduğunuz durumlarda, sorun yaşamadan önce denetim yapmanız gerekecektir. Sanctum veya Passport ile bu süreç hızlı ve güvenli bir hale gelir.
Bu konular hakkında daha fazla bilgi için ayrıntılı hikayemiz Substack hesabımızda mevcuttur: https://ucodesoft.substack.com/p/sanctum-and-passport-why-we-stopped
Kaynak: Orijinal Makale


