Hocam bahsettiğiniz RESTful API sanırım,Bu API gerekli URL’e request atıldığında verileri JSON olarak sunuyor herhalde. Uzman değilim bende bir şeyler kapmak istiyorum. Bilmediğimden soruyorum başka birisi de nereye request atacağını bilirse keylere erişimi olmaz mı?
Keylerin hepsini çekmiyorsun API'dan, key'in varlığını doğruluyorsun. Dolayısıyla keyleri göremezler, erişimleri olmaz.
Keyler secrettır. Key'e erişimi olan kişi API'a erişimi varsa geçici AUTH key alabilir ama AUTH keyi alsa ne yapacak? AUTH keyin tek amacı kullanıcının programda kalmasına izin vermek ve geçici, yani süresi dolunca erişim hakkı kalkacak.
İlla Restful olmak zorunda değil ama daha yaygın, hızlı ve geliştirmesi kolay, onun da kendi güvenlik önlemleri var ayriyeten.
API’ye erişimi olan Client’lar için birde API key mi olacak? Belirli IP’ler üzerinden gelen requestlere izin vermek ve rate limiting yapmak da güvenlik için iyi olur değil mi? Birde keylerin mesela veritabanında şifrelenerek saklanması gerekiyor anladığım kadarıyla.
Keyler şifrelenmez hashlenir. Şifrelediğin çözülür, hash çözülmez. Hash collision yaşanabilir belki ama SHA256'da zor bu. SHA-512 kullanırsan daha da zor.
Rate limiting kesinlikle önemli brute force önlemek adına ama IP kısıtlaması sıkıntılı iş. Statik IP gerektirir kullanıcı tarafında. Yada sürekli mail doğrulaması istemen gerekir. User experience açısından berbat bir şey. Keyler yeterince uzun olursa rate limiting tek başına brute force'a karşı etkilidir.
API key vermezsin, public API'dır doğrulama API'ı. Sonuçta amaç doğrulamak. Doğrulamayı yerel değil bulutta yapıyoruz kısaca. Login işlemi doğrulamak gibi düşün, teknik olarak kullanıcı adı şifre yerine special key verecek programın kullanıcısına. Bu kadar zahmete girmişken login kısmını kendi keylerin yerine OAuth'a da bırakabilirsin normalde ama böyle bir şeyle uğraşmak öğrenmeye de yardımcı oluyor.
Benimde muazzam bilgim yok konu üstüne. Az biraz tecrübe üstüne konuşuyorum. Daha öncede dediğim gibi güvenlik uzmanı değilim, bilgim kısıtlı, eksik söylediğim şeyler olabilir.