Bir API Anahtarı üzerinden yetkilendirme / kimlik doğrulama kullanarak bir REST API tasarlıyorum.
Bunun için en iyi yer ne olduğunu anlamaya çalıştım ve birçok insan gibi özel bir HTTP üstbilgisi kullanmanızı öneririz öğrendim ProjectName-Api-Key
, örneğin:
ProjectName-Api-Key: abcde
ancak Authorization
başlığı özel bir şema ile kullanmak da mümkündür ve ideolojik olarak doğrudur , örneğin:
Authorization: ApiKey abcde
Öte yandan, özel bir Yetkilendirme şemasının bazı istemciler tarafından beklenmedik ve desteklenemeyebileceğini ve yine de özel koda yol açabileceğini düşündüm, bu nedenle müşteriler hakkında herhangi bir beklentisi olmadığı için özel bir başlık kullanmak daha iyidir.
Hangi yolla API Anahtarı göndermeyi tercih edersiniz?
Bearer
şema yalnızca oAuth2 ile birlikte kullanılıyor. OAuth seslerinden ayrı olarak uygulamak, yanlış kullanım olarak algılanır. OAuth yoksa bu şemayı kullanmak neden doğrudur? Bu arada, API'm için bir tür yetkilendirme seçme konusunda sorun yaşadım. API yalnızca bir güvenilir hizmet için kullanılabilir olacak, bu yüzden oAuth2'nin istemci kimlik bilgileri akışını araştırdım ve benim durumumda ApiKey ile karşılaştırıldığında herhangi bir fayda bulamadım.
ApiKey
yeniden adlandırılmış ve Access Token
son kullanma tarihi olmadan müşteriye verilen bir yorum olarak yorumlanmışsa geçerli bir oAuth uygulaması olarak kabul edilebilir . Bu bir tür felsefi açıdan, eğer benim durumum basit terimlerle tarif edilebiliyorsa karmaşık tanımlamalar getirmemeye ve sadece "ApiKey" demeye karar verdim. Protokolünüz oAuth standardını uyguluyorsa, kullanmaya karar verebilirim Bearer
, ancak kabul etmiyor, sanırım bu şema uygulanamaz.
Authorization: Bearer <token>
başlık kullanıyor ve bununla ilgili hiçbir zaman tek bir sorun yoktu. Jetonlar JWT s'dir.