Clés API vs authentification HTTP vs OAuth dans une API RESTful

Je travaille sur la construction d’une API RESTful pour l’une des applications que je gère. Nous cherchons actuellement à y intégrer différents éléments nécessitant un access et une sécurité plus contrôlés. En recherchant comment sécuriser l’API, j’ai trouvé quelques opinions différentes sur la forme à utiliser. J’ai vu certaines ressources dire que HTTP-Auth est la voie à suivre, tandis que d’autres préfèrent les clés API, et même d’autres (y compris les questions que j’ai trouvées ici sur SO) ne jurent que par OAuth.

Ensuite, bien sûr, ceux qui préfèrent, par exemple, les clés API, disent que OAuth est conçu pour les applications qui ont access au nom d’un utilisateur (si je comprends bien, par exemple en vous connectant à un site autre que Facebook en utilisant votre compte Facebook). et non pour un utilisateur accédant directement aux ressources d’un site auquel il s’est spécifiquement inscrit (par exemple, le client officiel de Twitter accédant aux serveurs Twitter). Cependant, les recommandations pour OAuth semblent être les mêmes pour les besoins d’authentification les plus élémentaires.

Ma question est donc la suivante: en supposant que tout soit fait sur HTTPS, quelles sont les différences pratiques entre les trois? Quand faut-il être considéré sur les autres?

Cela dépend de vos besoins. As-tu besoin:

  • Identité – qui prétend faire une demande d’API?
  • Authentification – sont-ils vraiment ce qu’ils disent être?
  • Autorisation – sont-ils autorisés à faire ce qu’ils essaient de faire?

ou tous les trois?

Si vous avez juste besoin d’identifier l’appelant pour suivre le volume ou le nombre d’appels d’API, utilisez une clé API simple. Gardez à l’esprit que si l’utilisateur qui a émis la clé API le partage avec quelqu’un d’autre, il pourra également appeler votre API.

Mais si vous avez également besoin d’une autorisation, vous devez fournir un access uniquement à certaines ressources basées sur l’appelant de l’API, puis utiliser oAuth.

Voici une bonne description: http://www.srimax.com/index.php/do-you-need-api-keys-api-identity-vs-authorization/