Kimlik doğrulama gerektiren bir REST API geliştiriyorum. Kimlik doğrulamanın kendisi HTTP üzerinden harici bir web hizmeti aracılığıyla gerçekleştiğinden, kimlik doğrulama hizmetini tekrar tekrar çağırmaktan kaçınmak için belirteçleri dağıtacağımızı düşündüm. Bu da beni düzgün bir şekilde ilk soruma getiriyor:
Bu, istemcilerin her istekte HTTP Temel Kimlik Doğrulamasını kullanmasını gerektirmekten ve kimlik doğrulama hizmeti sunucu tarafındaki çağrıları önbelleğe almaktan gerçekten daha mı iyi?
Temel Kimlik Doğrulama çözümü, içerik taleplerinin başlayabilmesi için sunucuya tam bir gidiş dönüş gerektirmeme avantajına sahiptir. Belirteçler kapsam açısından potansiyel olarak daha esnek olabilir (yani yalnızca belirli kaynaklara veya eylemlere haklar verir), ancak bu, daha basit kullanım durumumdan OAuth bağlamına daha uygun görünmektedir.
Şu anda jetonlar şu şekilde edinilir:
curl -X POST localhost/token --data "api_key=81169d80...
&verifier=2f5ae51a...
×tamp=1234567
&user=foo
&pass=bar"
api_key
, timestamp
Ve verifier
tüm isteklere göre gereklidir. "Doğrulayıcı" şu şekilde döndürülür:
sha1(timestamp + api_key + shared_secret)
Niyetim, yalnızca bilinen taraflardan gelen aramalara izin vermek ve aramaların aynen tekrar kullanılmasını önlemektir.
Bu yeterince iyi mi? Underkill? Aşırı yükleme?
Müşteriler ellerinde bir jetonla kaynakları edinebilir:
curl localhost/posts?api_key=81169d80...
&verifier=81169d80...
&token=9fUyas64...
×tamp=1234567
Mümkün olan en basit çağrı için, bu korkunç derecede ayrıntılı görünüyor. shared_secret
Çıkarılabileceğini varsaydığım bir iOS uygulamasına (en azından) gömülmeyi düşünürsek , bu yanlış bir güvenlik duygusunun ötesinde bir şey sunuyor mu?